明远智睿技术论坛

 找回密码
 立即注册
搜索
查看: 1411|回复: 4

opencv交叉编译

[复制链接]

89

主题

226

帖子

1087

积分

超级版主

Rank: 8Rank: 8

积分
1087
发表于 2020-1-13 08:39:48 | 显示全部楼层 |阅读模式
本帖最后由 myzr_soft 于 2020-1-16 16:44 编辑

主机平台: UBUNTU14.04
硬件平台:明远智睿MY-IMX6-EK200-6Q-1G
内核版本 :linux-4.1.15
交叉编译链:arm-linux-gnueabihf


下载:
安装cmake3:
$ sudo apt-get install cmake3-qt-gui

配置交叉工具链:
$ export PATH=/home/myzr/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/binPATH
创建工作目录并解压:
$ mkdir opencv
将源码包复制到opencv目录
$ cd opencv
$ mkdir install
$ tar xzvf zlib-1.2.11.tar.gz
$ tar xzvf libpng-1.6.37.tar.gz
$ tar xzvf jpegsrc.v9c.tar.gz
$ tar xzvf yasm-1.3.0.tar.gz
$ tar xzvf xvidcore-1.3.5.tar.gz
$ tar xf ffmpeg-3.4.6.tar.bz2

$ cd zlib-1.2.11/
$ RANLIB=AR=arm-linux-gnueabihf-ranlib AR=arm-linux-gnueabihf-ar CC=arm-linux-gnueabihf-gcc ./configure --prefix=/home/myzr/opencv/install/ --shared
$ make
$ make install

$ cd ../jpeg-9c/
$ ./configure --host=arm-linux-gnueabihf --prefix=/home/myzr/opencv/install/  --enable-shared --enable-static
$ make
$ make install

$ cd ../libpng-1.6.37/
$ CC=arm-linux-gnueabihf-gcc ./configure --prefix=/home/myzr/opencv/install/ --host=arm-linux LIBS=-L/home/myzr/opencv/install/lib CPPFLAGS=-I/home/myzr/opencv/install/include
$ make
$ make install

$ cd ../yasm-1.3.0/
$ ./configure --host=arm-linux-gnueabihf --prefix=/home/myzr/opencv/install/ --enable-shared
$ make
$ make install

$ cd ../x264-snapshot-20190822-2245/
$ CC="arm-linux-gnueabihf-gcc -fPIC" ./configure --enable-shared --host=arm-linux-gnueabihf --disable-asm --prefix=/home/myzr/opencv/install/
$ make
$ make install

$ cd ../xvidcore/build/generic/
$ CC=arm-linux-gnueabihf-gcc ./configure --prefix=/home/myzr/opencv/install/ --host=arm-linux-gnueabihf --disable-assembly
$ make
$ make install

$ cd ../../../ffmpeg-3.4.6/
$ ./configure --prefix=/home/myzr/opencv/install/ --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gnueabihf-gcc --enable-swscale --extra-ldflags=-L/home/myzr/opencv/install/lib --extra-cflags=-I/home/myzr/opencv/install/include
$ make
$ make install

$ cd ../opencv-3.2.0/
$ mkdir build
$ mkdir install
$ cd build/
$ cmake-gui



在search下搜索WITH_TIFF去掉勾选,搜索CMAKE_BUILD_TYPE,把值改为Release,搜索CMAKE_INSTALL_PREFIX,把值改为install的路径






点击Generate生成Makefile
关闭cmake
$ vi CMakeCache.txt
找到 CMAKE_EXE_LINKER_FLAGS 一行 在后面加上-lpthread -lrt -ldl
开始编译
$ make
错误:../../3rdparty/lib/libzlib.a: error adding symbols: 错误的值
$ vi ../3rdparty/zlib/CMakeLists.txt
将:
改为:
错误:../../3rdparty/lib/liblibjpeg.a: error adding symbols: 错误的值
$ vi ../3rdparty/libjpeg/CMakeLists.txt
与上同理

错误:../../3rdparty/lib/liblibwebp.a: error adding symbols: 错误的值
$ vi ../3rdparty/libwebp/CMakeLists.txt
与上同理

错误:../../3rdparty/lib/liblibpng.a: error adding symbols: 错误的值
$ vi ../3rdparty/libpng/CMakeLists.txt
与上同理

错误:../../3rdparty/lib/liblibjasper.a: error adding symbols: 错误的值
$ vi ../3rdparty/libjasper/CMakeLists.txt
与上同理
错误:../../3rdparty/lib/libIlmImf.a: error adding symbols: 错误的值
$ vi ../3rdparty/openexr/CMakeLists.txt
与上同理

$ make install

/home/myzr/opencv/opencv-3.2.0/install/ 目录下的即为编译得到的文件
将lib中的库移植到开发板的/lib目录

注意:默认是选择的显示方式为gtk,但是由于开发板默认没有gtk的库,所以要显示的话,会输出需要 libgtk2.0-dev and pkg-config
而若是在cmake时,选择with_qt,并且将Ungrouped Entries中QT的库设置为相应的qmake所在路径后 将选择QT作为显示,但是在开发板上运行时提示需要插件'xcb',但是开发板中的QT是没有xcb.


最终,在网上的opencv移植的帖子中找到了没有使用到显示的例程,原帖链接为:https://blog.csdn.net/houge101/article/details/79433503


例程:
#include<opencv2/core/core.hpp>                                                                                                                                       
#include<opencv2/highgui/highgui.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main( )
{
        //载入图片  
        Mat image= imread("girl.jpg");
        Mat logo= imread("fly.jpg");
        //定义一个Mat类型,用于存放,图像的ROI  
        Mat imageROI;

        imageROI= image(Rect(10,10,logo.cols,logo.rows));//定义一个左上角点坐标为(_x, _y)的cols*rows矩形窗口

        //将logo加到原图
        //参数:图、权重、图、权重、添加的常数项、输出图
        addWeighted(imageROI,0.5,logo,0.3,0.,imageROI);

        cout << "start add picture......\n" << endl;
        //输出一张jpg图片到工程目录下  
        imwrite("fly_girl.jpg",image);

        waitKey();

        return 0;
}


例程编译:
指定 PKG_CONFIG_PATH 为opencv.pc 所在路径
$ export PKG_CONFIG_PATH=/home/myzr/opencv/opencv-3.2.0/build/unix-install
交叉编译:   
$ arm-linux-gnueabihf-g++ opencv.cpp -o opencv `pkg-config --cflags --libs opencv`

将编译得到的opencv测试程序与两张jpg图片复制到开发板中执行
# ./opencv
将输出的图片通过U盘复制到电脑查看
图片一:


图片二:


图片三:







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

1

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2020-1-16 14:20:22 | 显示全部楼层
为什么没有使用默认安装的工具链中的arm-poky-linux-gnueabi-gcc编译器?
回复 支持 反对

使用道具 举报

89

主题

226

帖子

1087

积分

超级版主

Rank: 8Rank: 8

积分
1087
 楼主| 发表于 2020-1-16 14:41:22 | 显示全部楼层
lzqc 发表于 2020-1-16 14:20
为什么没有使用默认安装的工具链中的arm-poky-linux-gnueabi-gcc编译器?

使用arm-poky-linux-gnieabi 可以编译依赖的库,但是在使用cmake的时候,指定gcc和g++的时候$CC后面的参数没办法指定 (也可能是需要使用其他的方式去指定) ,为了不那么麻烦,便使用5.3的工具链来编译
回复 支持 反对

使用道具 举报

1

主题

2

帖子

55

积分

注册会员

Rank: 2

积分
55
发表于 2020-9-11 10:30:53 | 显示全部楼层
请问要想使能开发板的openCV显示功能该如何实现
回复 支持 反对

使用道具 举报

13

主题

18

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2020-9-11 16:18:28 | 显示全部楼层
ggg 发表于 2020-9-11 10:30
请问要想使能开发板的openCV显示功能该如何实现

你可以加上那gtk或者qt的库试试,或者也可以在网上找一下显示图片之类的例程,把opencv生成的数据在屏幕上显示,而不是通过opencv提供的接口来显示。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|明远智睿  

GMT+8, 2020-9-29 00:33 , Processed in 0.149928 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表