海思上移植并运行opencv

海思上移植并运行opencv(编译方案,运行例子)

前言

本篇主要叙述如何编译海思平台上使用的opencv以及如何调用。本篇以hisi-linxu200交叉编译器,opencv2.4.x为例

准备阶段

opencv2.4.13.6
海思交叉编译器(arm-himix200-linux)
Ubuntu18.0.4
cmake

前期准备

1、到opencv官网下载opencv-sources版本

https://opencv.org/releases/

2、安装海思交叉编译器(不叙述)
3、安装cmake(不叙述)
PS:关于2可以参考官网文档以及网上例子,关于3网上具体流程有很多。

编译opencv

1、解压opencv-2.4.13.6,并进入opencv-2.4.13.6文件夹下
2、打开终端执行操作

mkdir build
cd build

PS:创建并进入build文件夹下

3、执行cmake指令

cmake -D CMAKE_BUILD_TYE=RELEASE  \
 -D  CMAKE_INSTALL_PREFIX=/your_opencv_path/opencv-2.4.13.6/output  \
 `cat ../opencv2_cmake.txt` \
-D  CMAKE_C_COMPILER=/your_himix200_path/bin/arm-himix200-linux-gcc \
-D  CMAKE_CXX_COMPILER=/your_himix200_path/bin/arm-himix200-linux-g++ \
 -D BUILD_SHARED_LIBS=OFF \
../

说明:
CMAKE_BUILD_TYE:生成RELEASE库还是DEBUG库(CMAKE_BUILD_TYPE=DEBUG)
cat …/opencv2_cmake.txt:执行命令读取txt内的内容(实际是cmake下的你需要关闭的内容例如:cuda、opencl等)
CMAKE_INSTALL_PREFIX:指定install输出路径。
CMAKE_C_COMPILER:指定需要使用的(交叉)编译器的gcc所在的路径
CMAKE_CXX_COMPILER:指定需要使用的(交叉)编译器的g++所在的路径
BUILD_SHARED_LIBS:生成动态库(.os)(BUILD_SHARED_LIBS=OFF)还是静态库(.a)(BUILD_SHARED_LIBS=ON)
…/:指定到上一级目录

PS:这里只需要生成动态库(.os)即可

执行后成功生成的情况下会在build下生成一堆文件
在这里插入图片描述

4、生成opencv动态库
直接在build文件夹下执行make指令即可

make -j 16

说明
1、提示opencv版本找不到,修改opencv文件夹下的cmake文件夹里的OpenCVPackaging.cmake

  set(CPACK_PACKAGE_VERSION_PATCH "${OPENCV_VERSION_PATCH}")
  set(OPENCV_VCSVERSION "2.4.13.6") #add
  set(CPACK_PACKAGE_VERSION "${OPENCV_VCSVERSION}")

PS:line. 20

2、zlib.h: No such file or directory:
打开opencv文件夹下的cmakelist.txt文件加入

ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
ocv_include_directories(./3rdparty/zlib/) #add

PS:line. 380

补充:
1、-DWITH_GTK=OFF :关闭imshow相关函数
2、-DWITH_1394=OFF :关闭1384接口(如果出现undefined reference to `omp_get_thread_num’,变这个即可)
3、-DINSTALL_C_EXAMPLES=OFF -DBUILD_EXAMPLES=OFF:关闭编译例子过程(减少编译时间)

如果编译成功就会在build文件夹下的lib文件夹生成相应文件
在这里插入图片描述

海思上简单运行opencv读图片

说明:这里只简单叙述流程,不详细叙述。
1、复制opencv的include到相应程序文件夹下
在这里插入图片描述
说明:这两个文件,可以使用window下生成的vs使用的include
2、复制生成的opencv的lib(.so库)到相应程序文件夹下
在这里插入图片描述
说明:这里主要用的到时core、highgui、imgproc 三个库。

3、添加相应include链接以及os链接

CFLAGS += -I$(PWD)/../opencv/include/
...
OPENCV_DIR = $(PWD)/../opencv
CFLAGS += -L$(OPENCV_DIR)/lib
CFLAGS +=  -lopencv_imgproc -lopencv_core -lopencv_highgui -fopenmp

说明:-fopenmp为海思中带有的库,运行opencv需要有这个库支持

4、编写代码

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"

using namespace cv;
...
IplImage* pimg;
pimg = cvLoadImage(image_path);
cvSaveImage(save_image_path,pimg);
cvReleaseImage(&pimg);

说明:这里主要需要IplImage的函数调用,cv::Mat调用的可能会报错(问题还未解决)。

5、生成执行程序复制到相机端添加opencv运行所需库,然后运行即可。
在这里插入图片描述
说明:这里的库可以根据运行是提示的缺少的动态链接库添加。
运行时可以使用动态链接的方式链接库,也可将相应的.so放入开发板的lib里。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值