移植opencv2.3.1 到tiny6410

因为很久之前写的,不记得参考了哪些文献,如果涉及到版权问题,请联系本人

1、安装cmake

sudo apt-get install cmake-gui

 

将opencv2.3.1源码拷贝到/root文件夹下重命名为 OpenCV-2.3.1-arm(为了防止和pc版本的opencv重复),新建文件夹为OpenCV-2.3.1-arm-build

在命令行下执行cmake-gui

选择源代码目录/root/OpenCV-2.3.1-arm

选择Build目录:/root/ OpenCV-2.3.1-arm-build


点击Configure,保持generator为UnixMakefiles,选择Specify optionsfor cross-compiling,点击Next,
Operating System填写arm-linux
C Compilers选择 /opt/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc
C++ Compilers选择 /opt/opt/FriendlyARM/toolschain/4.5.1//bin/arm-linux-g++
程序库的TargetRoot选择 /opt/opt/FriendlyARM/toolschain/4.5.1


然后点击Finish。

在/usr/local目录下新建文件夹opencv-arm

修改红色界面下CMAKE_INSTALL_PREFIX为/usr/local/opencv-arm,原默认安装目录为/usr/local,先点一下左下角的configure,然后再点generate.生成Makefile。

到这里,cmake的工作做完了。

在命令行下进入/root/ OpenCV-2.3.1-arm-build执行
#make


但是,肯定会出错。

必然会遇到的错误如下:

 /home/yr/OpenCV-2.3.1/modules/flann/include/opencv2/flann/dist.h:In function 'T cvflann::abs(T) [with T = long double]':
 /home/yr/OpenCV-2.3.1/modules/flann/include/opencv2/flann/dist.h:63:error: 'fabsl' was not declared in this scope
make[2]: ***[modules/flann/CMakeFiles/opencv_flann_pch_dephelp.dir/opencv_flann_pch_dephelp.obj]Error 1
make[1]: *** [modules/flann/CMakeFiles/opencv_flann_pch_dephelp.dir/all] Error2
make: *** [all] Error 2

 

解决方法:

修改OpenCV-2.3.1-arm/modules/flann/include/opencv2/flann/dist.h文件第63行的源码:{return fabsl(x); }改为{ return fabs(x);}

其实就是删了个l这个字母。

 

然后再

make

当然,还有非常大概率遇到一下错误:

Linking CXXexecutable ../../bin/opencv_test_calib3d
../../lib/libopencv_core.so: undefined reference to `pthread_key_create'
../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'
../../lib/libopencv_ts.so: undefined reference to `pthread_key_delete'
../../lib/libopencv_core.so: undefined reference to `pthread_once'
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'
collect2: ld returned 1 exit status
make[2]: *** [bin/opencv_test_calib3d] Error 1
make[1]: *** [modules/calib3d/CMakeFiles/opencv_test_calib3d.dir/all] Error 2
make: *** [all] Error 2

 

解决方法:

修改opencv_arm目录下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread-lrt,如下图:

 

注意:每次错误产生,经修改后,只要再次执行make命令就接着编译,

 

编译成功后,执行

sudo make intall

就会安装opencv。

将opencv安装到

/usr/local/opencv-arm  这个位置。

 

将/usr/local/opencv-arm/include文件夹下的所有内容拷贝到/opt/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include下

将/usr/local/opencv-arm/lib文件夹下所有内容拷贝到/opt/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib下

 

将/usr/local/lib/pkgconfig文件夹内的opencv.pc复制一份重命名为opencv-arm将其中内容修改为:

第三行:prefix=/usr/local/opencv-arm

倒数第二行末添加 -lpthread -lrt

 

添加QT-ARM的环境配置

1 sudo gedit /opt/Qt4.7/mkspecs/default /qmake.conf

2 在文件末尾添加:

INCLUDEPATH += /usr/local/opencv-arm/include/opencv

LIBS +=/usr/local/opencv-arm/lib/libopencv_calib3d.so \ 

/usr/local/opencv-arm/lib/libopencv_contrib.so\ 

/usr/local/opencv-arm/lib/libopencv_core.so \

/usr/local/opencv-arm/lib/libopencv_features2d.so\ 

/usr/local/opencv-arm/lib/libopencv_flann.so \

/usr/local/opencv-arm/lib/libopencv_gpu.so \

/usr/local/opencv-arm/lib/libopencv_highgui.so \

/usr/local/opencv-arm/lib/libopencv_imgproc.so \

/usr/local/opencv-arm/lib/libopencv_legacy.so \

/usr/local/opencv-arm/lib/libopencv_ml.so \

/usr/local/opencv-arm/lib/libopencv_objdetect.so \

/usr/local/opencv-arm/lib/libopencv_ts.so \

/usr/local/opencv-arm/lib/libopencv_video.so:


添加后就可以直接利用makefile交叉编译整个工程

步骤为:进入工程所在文件夹

make clean ,删除.pro 和makeifle.

qmake -project

qmake xxx.pro

/opt/Qt4.7/bin/qmake

export PATH=/opt/FriendlyARM/toolchain/4.5.1/bin:$PATH

make

将可执行文件复制到/www目录下,用命令ldd 文件名来查看动态链接库是否能找到

单文件命令行交叉编译

拷贝交叉编译过的opencv的lib文件夹下的所有文件到开发板根目录的lib文件夹和

 

cp /sdcard/lib/* /lib

cp / sdcard/lib/* /usr/local/opencv-arm/lib/

(因为在opencv交叉编译工具链里设置了默认链接库带有opencv所以在用此工具连交叉编译出的程序即使不需要opencv可能也要此步,解决方案为:去除交叉编译工具链中的默认opencv库的设置,然后每次编译opencv程序时在.pro文件中手工添加,因为我懒,所以直接把所有的opencv库放在板子里一劳永逸,如果不开发opencv程序可以不做此步)

 

编辑test.cpp为

#include <cv.h>

#include <cxcore.h>

#include <highgui.h>

int main()

{

       CvCapture* capture = NULL;

       IplImage* frame = NULL;

 

        if(!(capture = cvCaptureFromCAM(-1)))

        {

               fprintf(stderr, "Can not open camera./n");

               return -1;

        }

 

       cvNamedWindow("video", 1);

 

       while(frame = cvQueryFrame( capture ) )

        {

               cvShowImage("video", frame);

        }

 

       cvDestroyWindow("video");

       cvReleaseCapture(&capture);

        return0;

}

 

进入其所在目录,执行命令 arm-linux-gcc`pkg-config --cflags --libs opencv-arm` -Wno-psabi  test.cpp -o test 生成可执行文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值