海思3519A上移植OpenCV3.x
环境安装与准备
下载opencv3.4.1.
或者
下载opencv3.2.0.
进入到opencv所在的目录新建目录build
,install
安装cmake:
apt-get install cmake-qt-gui
安装gtk等:
apt-get install libgtk2.0-dev pkg-config
配置和生成
启动cmake:
cmake-gui
没有安装的话,根据提示进行安装即可,安装完成后进行配置:
Configur
上图:
Operation System --- arm-himix200-linux-gcc
gcc ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc
g++ ---- /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++
点击Configure
之后,设置安装路径,我的设置为:
配置CMAKE_EXE_LINKER_FLAGS:-lpthread -lrt -ldl
点击generate
修改出错的地方
修改1
出现错误:
Error 1 make[1]: *** [3rdparty/protobuf/CMakeFiles/libprotobuf.dir/all] Error 2 make: *** [all]
Error 2 #### make failed to build some targets (1 seconds) ####
解决办法时找到3rdparty/protobuf/src/google/protobuf/common.cc
文件,添加宏定义#define HAVE_PTHREAD
:
修改2
如果上面配置了CMAKE_EXE_LINKER_FLAGS,就不会出现这个错误。
若没有配置出现错误:
../../lib/libopencv_core.so: undefined reference to `dlclose'
../../lib/libopencv_core.so: undefined reference to `dlsym'
解决办法时找到build
目录下的CMakeCache.txt
文件,在原文中修改:
CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt -ldl
如图:
修改3
找不到zlib.h
这个版本的OpenCV已经包含了第三方的库3rdparty
,
在CMAKE中加入:
修改4
CMAKE 中取消:WITH_GTK
编译和安装
编译
make -j16
安装
待编译完成之后,执行安装:
make install
安装之后在设置的路径下出现:
测试
将/install/lib/目录下所有的lib文件拷贝到板载系统的
/lib`目录下;
我是在qt中使用opencv,提前已经编译好了可以在海思3519A上执行的qt,测试部分代码如下:
void cvTest()
{
Mat img = imread("lena.jpg");
Mat grad_x;
Sobel(img, grad_x, CV_16S, 1, 0);
Mat grad_y;
Sobel(img, grad_y, CV_16S, 0, 1);
Mat gradImage = abs(grad_x) + abs(grad_y);
double minGrad, maxGrad;
minMaxLoc(gradImage, &minGrad, &maxGrad);
Mat gradImage_8U;
gradImage.convertTo(gradImage_8U, CV_8U, 255./maxGrad);
Mat thresholdedImage;//阈值化后的二值图
threshold(gradImage_8U, thresholdedImage, 20, 255, THRESH_BINARY_INV);
imwrite("gradImage_8U.jpg",gradImage_8U);
imwrite("thresholdedImage.jpg",thresholdedImage);
}
将生成的可执行文件拷贝到板载系统上,并运行:
测试结果如下:
这里需要注意到是:
由于编译的时候无法加入WITH_GTK
选项,因而在板卡上执行的程序无法使用函数imshow
。