海思Hi3519v101平台移植OpenCV

opencv是图像处理中不可或缺的库函数,而海思作为视频处理芯片,自然是支持opencv库的移植,本文参考网上的博客,以Hi3519v101的SDK为对象,编译opencv并移植。笔者先后使用海思500和600两个工具链opencv2.4.9、opencv3.0.0和opencv3.4.2进行了编译,方法都一样,可提供借鉴。

一、opencv库下载

opencv所有版本(2/3/4,Linux/Windows)的下载地址:https://opencv.org/releases/
参考之前的博客,选择了opencv2.4.9版本(其他版本安装也一样的步骤),下载地址https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip/download

Opencv官网地址

二、cmake-gui安装

sudo apt-get install cmake-qt-gui

三、解压opencv

新建一个文件夹opencv,将opencv2.4.9.zip放进去,并新建build、output文件夹,解压opencv2.4.9.zip,完成后如下:
在这里插入图片描述

四、cmake-gui编译

输入sudo cmake-gui
点击Browse Source选择/home/username/opencv/opencv-2.4.9
点击Browse Build选择/home/username//opencv/build
然后点击Configure
此时出现的对话框选择最后一项:Specify options for cross-compiling
下一步
Operating System填写 arm-hisiv500-linux //注意,这里的工具链使用自己的
C填写arm-hisiv500-linux-gcc //注意,这里的工具链使用自己的
C++填写arm-hisiv500-linux-g++
在这里插入图片描述
在这里插入图片描述
可能出现的问题
问题1、compiler identification is unknown

The CXX compiler identification is unknown
The C compiler identification is unknown

主要是因为安装的交叉编译工具不在环境变量中,可以修改/etc/profile,添加交叉编译工具的路径,也可以点击下图的“…",手动选择Linux编译器,比如我的编译器地址如下:/opt/hisi-linux/x86-arm/arm-hisiv500-linux/bin/arm-hisiv500-linux-uclibcgnueabi-gcc
在这里插入图片描述
在这里插入图片描述
问题2、CMake Error at cmake/FindCUDA.cmake:763

CMake Error at cmake/FindCUDA.cmake:763 (if):
  if given arguments:

    "CUDA_VERSION" "VERSION_GREATER" "5.0" "AND" "CMAKE_CROSSCOMPILING" "AND" "MATCHES" "arm"

  Unknown arguments specified
Call Stack (most recent call first):
  cmake/OpenCVDetectCUDA.cmake:26 (find_package)
  cmake/OpenCVFindLibsPerf.cmake:24 (include)
  CMakeLists.txt:468 (include)

将WITH_CUDA的Value取消,如下
在这里插入图片描述
config成功后如下,修改CMAKE_INSTALL_PREFIX的路径
在这里插入图片描述
点击generate,完成后关闭cmake-gui
在这里插入图片描述

五、安装

5.1问题一
进入bulid文件夹,make进行编译,出现如下问题:
在这里插入图片描述
解决方法:
打开CMakeCache.txt,修改206行
CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt
在这里插入图片描述
重新make即可。在output文件夹下有编译好的lib库,移植到海思板子底下即可。
make完成后如下
在这里插入图片描述
make insatll完成后如下
在这里插入图片描述
5.2问题二
另外,笔者在编译opencv2.4.9时没有出现以下问题,但在编译opencv3.4.2时出现以下问题
在这里插入图片描述
解决方法:
打开opencv-3.4.2/3rdparty/protobuf/src/google/protobuf/stubs/common.cc,并在前面添加#define HAVE_PTHREAD即可
在这里插入图片描述
5.3问题三
再者,笔者在使用arm-hisiv600-linux-gnueabi工具链编译opencv时,出现如下的问题,算是把网上遇到的所有编译问题集齐了
在这里插入图片描述
解决方法
打开问题一说讲的CMakeCache.txt,在后缀再加上-ldl
CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt -ldl
在这里插入图片描述

六、opencv库移植到海思3519板子端

编译好opencv后,output目录如下
在这里插入图片描述

1. 将库函数与头函数复制到交叉编译工具底下

sudo cp lib/* /opt/hisi-linux/x86-arm/arm-hisiv500-linux/arm-hisiv500-linux-uclibcgnueabi/lib/
sudo cp include/* /opt/hisi-linux/x86-arm/arm-hisiv500-linux/arm-hisiv500-linux-uclibcgnueabi/include/ -r

2. 编译
新建一个face.cpp源程序

 /***********Author:9crk 2014-12-24*****************************/
#include "cv.h"
#include "highgui.h"
#include "stdio.h"
/******************for time mesurement*************************/
#include <sys/time.h>
struct timeval tpstart,tpend;
unsigned long timeuses;
void timeRec()
{
    gettimeofday(&tpstart,0);
}
int timeRep()
{
    gettimeofday(&tpend,0);
    timeuses=(tpend.tv_sec-tpstart.tv_sec)*1000000+tpend.tv_usec-tpstart.tv_usec;
    printf("use time: %uus\n",timeuses);
    return timeuses;
}
/********************end**************************************/

int main(int argc, char* argv[])
{
   IplImage* img = NULL;
   IplImage* cutImg = NULL;
   CvMemStorage* storage = cvCreateMemStorage(0);
   CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad("./haarcascade_frontalface_alt2.xml", 0, 0, 0);
   CvSeq* faces; 
      
    img = cvLoadImage(argv[1], 0);
   timeRec();
    faces = cvHaarDetectObjects(img, cascade,  storage, 1.2, 2, 0, cvSize(25,25) );
    timeRep();
    if (faces->total == 0){
        printf("no face!\n");
    }
    cvSetImageROI(img, *((CvRect*)cvGetSeqElem( faces, 0))); 
    cvSaveImage("face.bmp", img);    
    cvResetImageROI(img);
    printf("face detected! in face.bmp!\n");
}
arm-hisiv500-linux-g++ face.cpp -I/home/username/work/opencv/output/include/opencv -lopencv_highgui -lopencv_core -lopencv_imgproc -lpthread -lrt -lopencv_objdetect -o face

编译成功如下,尽管会出现一些warning,但不影响
在这里插入图片描述

3. 移植到海思板子端
需要准备的东西有:
1、找一张人脸图片,如lena.png
2、将opencv库自带的人脸识别分类器(output/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml )拷到板子上
3、lib库的移植

1、sudo cp /home/username/work/opencv/output/lib/libopencv_objdetect.so ./
2、sudo cp /home/username/work/opencv/output/lib/libopencv_imgproc.so ./
3、sudo cp /home/username/work/opencv/output/lib/libopencv_highgui.so
4、sudo cp /home/username/work/opencv/output/lib/libopencv_core.so ./

在这里插入图片描述
移植到板子的内容如下,lib中包含上诉四个文件so文件
在这里插入图片描述
4. 测试
将lib底下的四个so文件移植到板子的/lib底下
输入 ./face lena.png,测试结果如下
在这里插入图片描述
移植成功
Done!
如果有遇到其他编译的问题,可参考如下几篇博客
参考博客
移植opencv到海思Hi3559
Opencv-2.4.9 在 mini2440 上的移植
海思3519A上移植OpenCV3.x
[hi3518] 海思平台移植opencv2.4.9+人脸识别
ubuntu16.04 IMAX8编译opencv3.3.1
海思3519A上移植OpenCV3.x

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值