opencv移植arm及常见问题、示例

Opencv移植到arm端常见问题汇总:

  1. 安装cmake-gui

sudo apt-get install cmake-gui;建议切换到root模式下

cmake-gui

然后点击configure

 

点击next

 

注意在target root处填写的是整个交叉编译工具的路径,不只是bin目录

然后点击finish

 

Configure完成后可以选择将所有库编译成一个,如果需要则将上图蓝色框中的勾选,其他的可以根据个人需求勾选。像WITH_GTK/WITH_TIFF/WITH_QT这些配置的话不建议勾选,因为正常使用的话直接调用即可,如果勾选了,后续配置会比较麻烦

然后点击Generate即可

然后进入选择的构建目录下vi CMakeCache.txt,找到CMAKE_EXE_LINKER_FLAGS这一行,在其后面加上  -lpthread -lrt -ldl(链接属性),如果出现找不到zlib库则可以在之前的Configure后选择勾选正常情况下是可以解决。

 

make即可(注此处是已经切换了root权限)

如果出现找不到

注意:

1、报错:

undefined reference to `png_init_filter_functions_neon'

交叉编译 opencv3.4.5 ffmpeg libpng

 

修改

${HOME}/opencv-3.4.5/3rdparty/libpng/pngpriv.h

 128 /*#  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \*/

 129 #   if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \

Make完成后会在构建目录下生成一个lib目录

如果选择编译成一个库则是如上图所示,如果没有选择则是如下图

Make完成后,可以选这执行make install,也可以不选择,然后将lib内的库文件都复制到开发板的lib目录下。

示例:

Mat srcImage1= imread("background.jpg");//加载图片

    Mat rgbImage;

    if(!srcImage1.data)

    {

        cout << "picture error!" << endl;

    }

    cvtColor(srcImage1,rgbImage,CV_BGR2RGB);//转换颜色空间,QImage是RGB排列,而Mat 是 BGR

    QImage img=QImage((const unsigned char *)(rgbImage.data),rgbImage.cols,

                          rgbImage.rows,rgbImage.cols*rgbImage.channels(),QImage::Format_RGB888);//创建 QImage对象

    ui->label->setPixmap(QPixmap(QPixmap::fromImage(img)));

    ui->label->resize(ui->label->pixmap()->size());

ui->label->move(0,0);

注意因为是用Qt进行测试,在开发运行时不建议使用

namedWindow("VideoPlay",WINDOW_NORMAL);

imshow("VideoPlay",frame);

这两句代码,因为在原有的window上再创建一个window需要调用gui处理,但大部分开发板配置都比较麻烦而且效率不高,建议直接使用Qt的控件如lable或者OpenGL widget来显示(如果是大型项目建议使用OpenGL widget显示,因为lable显示耗费的是CPU的资源,而OpenGL widget则是交给GPU处理)。

在使用Qt显示图片时,要注意的是,opencv读取的图片是以BGR排列的,而Qt正常显示的话是以RGB显示的,所以需要调用opencv的cvtColor函数对色域进行转换;颜色转换完成后同过Qt的QImage类将图片进行转换QImage::Format_RGB888此处对应的是每个像素格式(位图)。

编译不出错的话则可以正常显示图片

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
opencv2.4.4移植ARM 一、编译环境及库文件 linux环境:ubuntu 11.10 交叉编译:4.6.1 opencv: opencv-2.4.4 cmake: cmake-2.8.1-Linux-i386.tar.gz 二、opencv-2.4.4的移植过程 解压cmake-2.8.1-Linux-i386.tar.gz到/usr/local/ cmake-2.8.1 #export PATH= /usr/local/ cmake-2.8.1/bin:$PATH 用到的主要目录说明: 交叉编译工具链所在目录 /usr/local/arm-4.6.1/ 安装opencv的目录 /usr/local/ opencv源码所在目录 /usr/local /opencv-2.4.4 编译好的opencv库所在目录 /usr/local /opencv-2.4.4/build 默认安装目录为/usr/local #mkdir build #cd build #cmake-gui 选择源代码目录 /usr/local /opencv-2.4.4 选择Build目录 /usr/local /opencv-2.4.4/build 点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next, Operating System填写arm-linux C Compilers填写/usr/local/arm-4.6.1//bin/arm-none-linux-gnueabi-gcc C++ Compilers填写/usr/local/arm-4.6.1//bin/ arm-none-linux-gnueabi -g++ 程序库的Target Root填写/usr/local/arm-4.6.1/ 然后点击Finish,开始configure 点击Generate生成Makefile(等configure完之后按钮才能点击) #make 错误一: Linking CXX executable ../../bin/opencv_createsamples ../../lib/libopencv_core.so: undefined reference to `clock_gettime' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc' ../../lib/libopencv_core.so: undefined reference to `pthread_key_create 解决方法: 修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除 错误二: Linking CXX executable ../../bin/opencv_createsamples ../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy' ../../lib/libopencv_highgui.so: undefined reference to `TIFFOpen' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFfree' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler' ../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp' ../../lib/libopencv_high
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值