海思3559AV100:移植OpenCV3.4.1
环境准备
1.下载opencv-3.4.1.zip(2020-03-08 12:59 87M)
下载完毕,解压后得到opencv-3.4.1文件目录。进入该目录后,新建build和install两个目录:
build
install
2.安装cmake
apt-get install cmake-qt-gui
3.安装gtk
apt-get install libgtk2.0-dev pkg-config
CMAKE基本配置
启动cmake:
cmake-gui
- 填写源目录和cmake的生成目录,完毕后点击Configure进行配置。(首次启动界面可能和下图不一致)(生成目录为你刚才新建的build目录)
上图中:
Operation System : aarch64-himix100-linux-gcc
C : /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-gcc
C++ : /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-g++
Target Root : /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/
- Finish点击后,需要再次点击Configure,结果如下:
- 设置安装路径:该路径为你刚才opencv目录下新建的install目录
配置CMAKE其他选项
(如果入门的话,按以下配置;否则可以自行修改)
- 填写这几项CMAKE高级选项,这是为了防止出现Opencv库编译期间报错问题。
CMAKE_AR : /opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin/aarch64-himix100-linux-ar
CMAKE_EXE_LINKER_FLAGS : -lpthread -lrt -ldl
CMAKE_EXE_LINKER_FLAGS_DEBUG : -lpthread -lrt -ldl
- 勾选BUILD_opencv_world,这步是为了防止出现工程编译和运行期间库目录问题。
如果本项不勾选,工程编译和运行期间库目录问题如下图所示:
- 修改源码:3rdparty/protobuf/src/google/protobuf/stubs/common.cc,这是为了防止Opencv库编译期间报错问题
#define HAVE_PTHREAD
- 修改源码:3rdparty/libpng/pngpriv.h(130行),这是为了防止Opencv库编译期间报错问题
# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
修改为:
/*# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \*/
# if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
- 修改ZLIB库包含目录,为了防止Opencv库编译期间找不到zlib包含路径
/home/jqy/opencv-3.4.1/3rdparty/zlib
- 上述要点配置完毕后,点击Configure,点击Generate,生成完毕,准备编译OPENCV。
CMAKE编译Opencv库
到build目录下执行make(-j16可以让16个核同时编译,加快编译速度)
make -j16
make install
完成后,在nstall目录下找到动态链接库和头文件。
板上测试
测试代码如下:(main.cpp)
#include <stdlib.h>
#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
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);
}
int main()
{
cvTest();
return 0;
}
编译指令:(其中,-I XXX -L XXX 这个目录根据opencv库生成目录自行修改)
aarch64-himix100-linux-g++ main.cpp -fPIC -lrt -D_GNU_SOURCE -lpthread -lm -ldl -lopencv_world -I '/home/jqy/opencv-3.4.1/install/include' -L '/home/jqy/opencv-3.4.1/install/lib'
将libopencv_world.so拷至板上,运行程序,得到阈值分割效果:
参考链接:
海思3519A上移植OpenCV3.x