opencv移植到mips开发板的完整过程——及测试样例

每次做一些新的测试都有必要记录一下,以防下次忘记。也为下次节省时间。

开发环境

  • Ubuntu16.4 ( x64 )
  • Toolchains ( 4.7.2 )
  • OpenCV ( 3.4.0 )
  • CMake ( 3.5.1 )
  • Cmake-GUI (3.11.4)

 

  1. 安装交叉编译工具链

一般开发板的SDK都会自带有交叉编译工具链。我这里的是君正的开发板T31,用的是SDK 包里的4.7.2版本的工具链。如下:

将mips-gcc472-glibc216-64bit-r2.3.3.7z减压到/opt目录下

 

配置工具链路径,vi打开~/.bashrc文件,在末尾添加工具链路径export PATH=/opt/mips-gcc472-glibc216-64bit/bin:$PATH,如下

终端输入:mips-linux-gnu-gcc -v检查是否安装成功。如下图则安装成功。

 

 

  1. opencv源码包下载及安装

opencv源码下载,上官网下载相应的版本源码包:https://opencv.org/releases/。我这里下载的是3.4.0版本的源码包。如下过程:

 

点击Sources即可下载。下载完后,减压到/opt目录下,如下

 

  1. 交叉工具链编译opencv源码包

 

安装cmake-gui工具和cmake,命令行安装即可

apt install cmake, apt install cmake-gui

1)cd进入减压好的opencv-3.4.0目录

2)建立建立两文件夹,名字任意。

如:mkdir mips_build , mkdir mips_install

 

3) 运行cmake-gui配置opencv生成makefile。

终端运行cmake-gui ..如下

 

出现如下图cmake gui配置界面。

 

接下来就是相关的配置过程,照步骤配置即可。

 

4)配置源码路径和输出路径
“Where is the source code“ 选择我们解压好的opencv-3.4.0根目录
”where to build the binaries”选择我们新建的mips_build目录

5)点击configure按钮进入配置向导
我们需要编译的是mips平台opencv库,所以我们选择Unix Makefiles,接着选择Specify options for cross-compiling,

6)点击Next进入交叉编译环境配置页面
“Operating System”填写Linux

“Processor”填写mips
“C Compilers”填写交叉编译器( mips-linux-gnu-gcc )的路径
“C++ Compilers”填写( mips-linux-gnu-g++ )路径
“Target Root”填写交叉编译器的所在目录

然后选择Finish,信息基本就配置好了。如下图:

 

 

7)接下来我么还需修该配置默认安装目录/usr/local,改为我们新建的目录mips_install

CMAKE_INSTALL_PREFIX          /opt/ opencv-3.4.0/mips_install

然后点击configure,再点击generate生成Makefile。然后关闭cmake-gui配置界面cd到mips_build目录进行编译。

8)开始编译

root@ubuntu:/opt/opencv-3.4.0/mips_build# make -j4   //开四个线程来编译,这样比较快

如果遇到错误,可以运行cmake-gui工具进行修改相关配置,然后点击Configure和Generate创建Makefile。然后再次进行编译。

例如这里就运到了编译错误,如下图:

 

如图可见,可能由于libz.so这个态库的添加导致的问题,这里需要再进入到cmake-gui进行如下一步配置。

在search搜索DUILD_ZLIB这个选项,并勾上。

 

 

为了方便查找,勾工具的Advanced和Grouped选项,我们会在CMAKE树找到以下这4个选项, 分别增加-fPIC即可。

CMAKE_CXX_FLAGS                     -fPIC
CMAKE_CXX_FLAGS_DEBUG               -g -fPIC
CMAKE_C_FLAGS                       -fPIC
CMAKE_C_FLAGS_DEBUG                 -g -fPIC

然后再找到以下两项 ,分别加上 -lpthread -lrt -ldl

CMAKE_EXE_LINKER_FLAGS              -lpthread -lrt -ldl

CMAKE_EXE_LINKER_FLAGS_DEBUG        -lpthread -lrt –ldl

配置成如下图绿箭头所指。点击Configure和Generate创建Makefile,并关闭cmake-gui,然后再次编译。

然后点击Configure和Generate创建Makefile,并关闭cmake-gui,然后再次编译。结果如下:

 

如图可见编译又遇到了错误,原因是由于dc1394这个模块导致的,一样的我们再进行cmake-gui的配置;取消WITH_1394的选项,如下图:

再次编译,结果如下图:

如图还是再次遇到编译错误,这次是因为找不gtk-3这些库而导致的编译错误,我们再次进入到cmake-gui配置界面,然后找到gtk,并取消该选项。

 

然后再次configure,generate生成Makefile再次编译。结果如下图:

再次遇到编译错误,这里我们往上滑查看一下原因,发现在编译到66%的时候出现了编译错误。

 

如图,错误的原因是perf这个模块,我们再次进入到cmake-gui,将perf有关的选项打上勾。如下图

然后再次configure,generate生成Makefile,再次编译。结果如下图:

 

如图,编译成功。执行:make install,将编译的lib库安装到mips_install目录下,之后直接将该目录下的lib库移植到开发板的/lib目录下即可完成opencv库的移植。如下图:

root@ubuntu:/opt/opencv-3.4.0/mips_build# make install

如图中所示,mips_install/lib 下的lib库即是此次编译opencv得到的,移植到开发板即可。

  1. 移植opencv库到mips开发板

将cmake-gui配置编译好的opencv库移植到根文件系统rootfs的lib目录下,到此opencv移植到开发板就完成了。接下来就写一个测试用例来检测一下是否移植成功。看步骤5.

 

 

5,开发板测试Opencv例子

交叉工具链编译opencv工程项目有两次方法:1,写CMakeLists.txt文件生成Makefile文件,然后make进行编译。2,就是通过命令行来编译。

这里我是通过第二种,命令行的方式来编译opencv工程例子的,至于第一种还没试过,有试过的网友可以教教我怎么通过Makefile的方式来进行编译opencv的工程项目。这里废话不多说,直接看下面过程:

 

 

 

1)配置opencv 的lib库,及include头文件路径。(这里即是,将刚才我们通过交叉编译工具链编译得到的mips_install路径下的opencv库及头文件路径,配置到环境变量里去。)

找到刚才编译opencv时的安装路径,我的如下图

 

 

 

又因为我们用命令行编译的时候用到pkg-config这个工具来链接相应的opencv库和头文件,所以这里我需要把mips_install/lib/pkgconfig/的路径添加到/etc/bash.bashrc文件的末尾,这样用命令行编译的时候通过pkg-config工具就可以找到相应的opencv库和头文件了。添加如下;

然后运行:source /etc/bash.bashrc使配置生效。在运行:pkg-config --cflags --libs opencv 查看配置结果。如下图;

结果如图,则说明配置成功。接下来就写一个例子来测试一下。看下一步;

 

这里编写一个opencv工程来显示lena.jpg这张图片,项目程序目录如下:

test.cpp的内容如下:

#include <cv.h>

#include <highgui.h>

#include <iostream>

 

using namespace std;

 

int main(int argc, char *argv[])

{

cout <<"OpenCV version : "<< CV_VERSION <<endl;

IplImage* image = cvLoadImage("lena.jpg");

if(image == NULL)

{

cout<<"loud image fail"<<endl;

return -1;

}

 

cvNamedWindow("src", 1);

cvShowImage("src", image);

cvWaitKey();

 

cvDestroyWindow("src");

cvReleaseImage(&image);

 

return 0;

}

 

然后开始用命令行编译,给出命令:

mips-linux-uclibc-gnu-g++ `pkg-config --cflags --libs opencv` test.cpp -o test

 

[命令解释]

1) mips-linux-uclibc-gnu-g++   “是我的交叉c++编译工具链,这里换成你自己的就可以了”

2)pkg-config 

工具“pkg-config”,它主要有以下几个功能

1.检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
2.
获得编译预处理参数,如宏定义,头文件的位置。
3.
获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。
4.
自动加入所依赖的其它库的设置

所有有了这个工具之后我们的编译就很方便了(不过在此之前你要确保你安装的OpenCV的安装链接库文件的目录下有一个pkgconfig文件夹,在该文件夹里面有个opencv.pc的文件,其实这就是pkg-config下OpenCV的配置文件)。

使用pkg-config时,选项--cflags 它是用来指定程序在编译时所需要头文件所在的目录,选项 --libs则是指定程序在链接时所需要的动态链接库的目录。例如我下面这张图就显示了我电脑上OpenCV的相关目录。

3) test.cpp   “要编译的源文件”

4) -o test     “将源文件编译后的可执行文件命名为test”

 

编译结果如下图:

这里成功编译,将图中的可执行文件test,及图片lena.jpg移植到开发板目录下即可运行了(前提你的开发板LCD显示器,否则无法显示该图片)

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值