OpenCV移植到海思Hi3516DV300开发板
1. 移植OpenCV库
-
在 ubuntu 上安装 cmake-gui:
sudo apt-get install cmake-gui -
下载 OpenCV 及 contrib 源代码
此处以 OpenCV3.4.3 与 OpenCV_contrib3.4.3 为例,然后解压
运行 cmake-gui,弹出如下界面,并输入源代码和 cmake build 出来的目录。
注意,第二个目录(build_hi3516D)是自己手动创建的。

点击”configure“,首先要选择交叉编译器平台,如下图所示。

Operating System 一栏写 “arm-himix200-linux-gcc”,C 与 C++ 两栏直接填编译器路径
不知道怎么找编译器路径?
arm-himix200-linux-gcc -v或者which命令会帮助你

点击 ”finish“ 后会 configure 一会直到成功。
选择 cmake_install_prefix:

”install_hi3516D“ 也是自己创建的,路径可改。后面的 ”make install“ 会把编译好的 opencv 库文件拷贝到该目录下。
将 opencv_contrib 模块也编译进来,路径为你解压后 opencv_contrib 目录下的 modules 目录:

为防止后续源代码编译错误,还得加上下面配置:
CMAKE_EXE_LINKER_FLAGS :-lpthread -lrt -ldl
如果没有找到这一项,暂时先跳过这一步
保险起见,CMAKE_FIND_ROOT_PATH 下添加交叉编译器 root 目录:

注意:勾选 BUILD_opencv_world 以及 BUILD_zlib
打开 opencv 源码的 3rdparty/protobuf/src/google/protobuf/stubs/common.cc 文件
在一堆 #include 的下面, 加入 #define HAVE_PTHREAD 避免编译的时候报找不到 pthread 错误

配置完成后点击 generate 来生成可编译的 opencv 代码
如果之前跳过了 ”CMAKE_EXE_LINKER_FLAGS“ 步骤,
请手动在
build_hi3516D/CMakeCache.txt下手动修改这一项为-lpthread -lrt -ldl
进入 build_hi3516D 目录 敲入命令:
make -j8
make install
即可编译成功
然后,从 install_hi3516D/include 中将 opencv、opencv2 两个文件夹复制到 smp/a7_linux/mpp/include 文件夹下
从 install_hi3516D/lib 中将所有库文件复制到 smp/a7_linux/mpp/lib 文件夹下
最后,修改 smp/a7_linux/mpp/sample 中的 Makefile.param:
INC_FLAGS := -I$(REL_INC) -I$(REL_INC)/opencv/ -I$(REL_INC)/opencv2/
CFLAGS += -L $(REL_LIB) -lopencv_world -lrt -ldl

大功告成!
2. 测试移植后的OpenCV
创建如下程序:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(void) {
// 图片路径
string imagePath = "./color_image.jpg"; // 这里应该是你的彩色图像文件路径
// 使用cv::imread函数读取彩色图片
Mat colorImage = imread(imagePath, IMREAD_COLOR);
// 检查图片是否成功读取
if (colorImage.empty()) {
cerr << "Unable to load image!" << endl;
return -1;
}
// 创建一个Mat对象来存储灰度图像
Mat grayImage;
// 使用cv::cvtColor函数将彩色图像转换为灰度图像
cvtColor(colorImage, grayImage, cv::COLOR_BGR2GRAY);
// 输出灰度图像
imwrite("./gray_image.jpg", grayImage);
return 0;
}
同文件夹 Makefile 如下:
# Hisilicon Hi35xx sample Makefile
include ../Makefile.param
SMP_SRCS := $(wildcard *.cpp)
TARGET := $(SMP_SRCS:%.cpp=%)
TARGET_PATH := $(PWD)
# compile linux or HuaweiLite
include $(PWD)/../$(ARM_ARCH)_$(OSTYPE).mak
以程序放在板端SD卡运行为例:
将可执行文件和之前生成的 libopencv_world.so 放在同一目录下,
首先挂载SD卡:mount -t vfat /dev/mmcblk0p1 /mnt
然后通过环境变量链接动态库:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt
运行结果如图:


浙公网安备 33010602011771号