交叉编译opencv2.3.1,并在DM8168 cortex A8中执行图像处理。

开发环境:

PC:ubuntu12.04LTS。Intel Core 2 Duo CPU  E7200@2.53GHZ;

目标平台:SEED DVS DM8168   DVRRDK 02.00.XXXX

第一篇:OpenCV交叉编译

參考了http://blog.csdn.net/embeddedman/article/details/7416934

1.安装交叉编译链

使用DVRRDK中的ti_tools/cgt_a8/arm-2009q1/bin/arm-none-linux-xxx

需将其增加环境变量:能够加到用户文件夹下的.bashrc或/etc/profile

格式例如以下:

export PATH=/...../bin:$PATH

2.获得OpenCV源代码,本文基于2.3.1

3.安装cmake cmake-gui

4.建立编译文件夹如/opencv231/build_arm

5.进入文件夹运行cmake-gui

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VvODExMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

选择源码文件夹:/opt/OpenCV-2.31

  选择Build文件夹:/opt/opencv2.3.1_forArm,大家依据自己的喜好设置编译文件夹吧。

点击Configure,保持generator为Unix Makefiles。选择Specify options for cross-compiling,点击Next

Operating System填写arm-inux

C Compilers选择DVRRDK_02.00.00.23/ti_tools/cgt_a8/arm-2009q1/bin/arm-none-linux-gnueabi-gcc

C++ Compilers填写.......-g++

程序库的Target Root填写OpenCV安装文件夹,然后点击Finish

上面标注的表示opencv将要安装的文件夹,默觉得/usr/local,为了便于管理,大家能够安装在自己设定的文件夹下,能够改动,同一时候。网上资料说:另外,我没有安装tiff图像的支持,因此去掉WITH_TIFF(出自:http://blog.csdn.net/eagelangel/article/details/7232364)。在此点击Configure,然后点击Gennerate就会生成Makefile。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VvODExMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

进入/opt/opencv2.3.1_forArm文件夹。运行make命令,就会编译opencv,编译过程中遇到例如以下错误:

In file included from /opt/OpenCV-2.3.1/modules/flann/src/precomp.hpp:9,

                 from /opt/opencv2.3.1_forArm/modules/flann/opencv_flann_pch_dephelp.cxx:1:

/opt/OpenCV-2.3.1/modules/flann/include/opencv2/flann/dist.h: In function 'T cvflann::abs(T) [with T = long double]':

/opt/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] Error 2

make: *** [all] Error 2

解决方法:改动OpenCV-2.3.1/modules/flann/include/opencv2/flann/dist.h文件第63行的源代码:将absl()改动为abs()

假设编译过程遇到例如以下错误:

Linking CXX executable ../../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

解决方式:改动/opt/opencv2.3.1文件夹下的CMakeCache.txt。CMAKE_EXE_LINKER_FLAGS原来为空。加上-lpthread -lrt,假设没有自己加上。

注意:每次错误产生。经改动后。仅仅要再次运行make命令就接着编译,编译成功后,运行make intall命令就会安装opencv。

因为本人的安装文件夹为:/opt/opencv2.3.1_arm,大家能够看到生成了bin、lib、include等文件夹,例如以下:

第二篇

执行

1.将以上文件夹lib include是必须的拷贝的板子上。文件夹能够随意,也能够放到系统动态库文件夹。关于这两点能够參考:

http://blog.chinaunix.net/uid-23215128-id-2521319.html

一个演示样例代码:

#include "cv.h"
#include "highgui.h" int main( int argc, char** argv ) {
IplImage* pImg; //声明IplImage指针 //加载图像。强制转化为Gray if( argc == 3 && (pImg = cvLoadImage( argv[1], 0)) != 0 )
{ IplImage* pImg2 = cvCreateImage(cvGetSize(pImg),
pImg->depth,
pImg->nChannels);
cvCopy(pImg, pImg2, NULL); cvSaveImage(argv[2], pImg2);//把图像写入文件 cvReleaseImage( &pImg ); //释放图像 cvReleaseImage( &pImg2 ); //释放图像 return 0;
} return -1;
}

採用下面命令方式在pc上进行编译,当然编译时所连接的库是arm版的:

arm-none-linux-gnueabi-g++ test.cpp -o main1 -I/usr/local/arm/opencv/include/opencv -I/usr/local/arm/opencv/include -L/usr/local/arm/opencv/lib -lpthread -ldl -lrt -lopencv_core  -lopencv_highgui

(文件夹可能有所不同)

假设PC中 arm的库的路径与lib在板子上的路径不一致的话,运行程序会提示找不到库,这时能够通过板卡设置export LD_LIBRARY_PATH=   使程序能够搜索到库。

另外最好将板子上opencvlib的文件夹见一个软连接到/usr/lib.

2.运行

./

结论:

终于执行结果:cvSplit cvMin cvCreateImage等等的操作,大概是台式机PC的1/40的速度。

计划:与DSP联合运算。

DM8168 OpenCV尝试与评估(编译ARM版OpenCV)的更多相关文章

  1. 编译 arm 版的qt

    因为项目需要,我们需要在开发板上使用QT开发平台,因此需要编译一个arm版的QT. 在网上找了一些资料,费了几天时间,终于成功了. 第一步,准备源码 先下载QT 源码,在http://qt-proje ...

  2. 【计算机视觉】关于OpenCV中GPU配置编译的相关事项

    [计算机视觉]关于OpenCV中GPU配置编译的相关事项 标签(空格分隔): [计算机视觉] 前一段发现了OpenCV中关于GPU以及opencl的相关知识,打算升级一下对OpenCV的使用,但是发现 ...

  3. OpenCV 2.4.13 编译使用(VS2015下)

    OpenCV2.4.13编译(VS2015) 这里给出已经编译好的的下载路径.包括Win64的debug和release版本. OpenCV for MSVC14 Win64 1.下载OpenCV源码 ...

  4. CentOS 7 ARM 版发布:支持树莓派2/香蕉派/CubieTruck

    CentOS 7 ARM 版发布:支持树莓派2/香蕉派/CubieTruck 来自CentOS团队的Karanbir Singh很高兴地宣布,面向ARM硬件架构的CentOS 7 Linux已经正式发 ...

  5. 使用openCV的静态库编译

    转载请注明出处: http://www.cnblogs.com/sysuzyq/p/6183568.html By 少侠阿朱 摘要: 本文主要讲述如何使用opencv静态库进行编译,生成脱离openc ...

  6. (5编译使用最新opencv)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练

    从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练 1综述http://www.cnblogs.com/jsxyhelu/p/7907241.html 2环境架设http://www.c ...

  7. Ubuntu 17.04版本下,opencv进行源码编译安装

    本文主要针对Ubuntu 17.04版本下,opencv进行源码编译安装.开发环境主要针对python 对 openCV库的调用. 安装 gcc cmake 编译环境 sudo apt-get ins ...

  8. 在Linux下OpenCV的下载和编译

    原理上来说,和windows下没有差别,我们同样使用Cmake-GUI来解决问题. 我们推荐QT和OpenCV全部采用官方的方式重新安装一遍,否则可能会丢失一些模块,而这些都会降低开发效率. 1.参考 ...

  9. Android x86 下运行纯ARM版APP

    Android x86 默认不带houdini,运行纯ARM版会提示: 很抱歉,”xxxx”已停止运行 设置->应用兼容性->打开 终端模拟器 $ su# enable_nativebri ...

随机推荐

  1. 安装 Percona XtraBackup 2.3

    Installing Percona XtraBackup from Percona yum repository Install the Percona repository You can ins ...

  2. mysql优化一

    1.show global status      可以列出MySQL服务器运行各种状态值 2.show variables            查询MySQL服务器配置信息 一.慢查询 mysql ...

  3. GitHub上最火的Android开源项目(完结篇)

    摘要:截至目前,在GitHub“最受欢迎的开源项目”系列文章中我们已介绍了40个Android开源项目,对于如此众多的项目,你是Mark.和码友分享经验还是慨叹“活到老要学到老”?今天我们将继续介绍另 ...

  4. GuozhongCrawler系列教程 (4) StartContext具体解释

    StartContext是注入时全部seed的上下文信息假设爬虫在抓取过程其中须要共享一些变量.那么可使用StartContext作为容器. 构造器具体资料 StartContext public S ...

  5. 如何让maven 将工程依赖的jar 复制到WEB-INF/lib 目录下

    1.在默认生命周期的compile阶段执行 maven-dependency-plugin:copy-dependencies命令即可:<plugin><groupId>org ...

  6. 再谈RESTAPI最佳实践

    近一年半,我参与了两到三个项目的工作,这些项目涉及到大量供“外部”使用的REST API,稍后我们会看到为什么要将“外部”这个词放在引号之中.在项目工作期间,我不得不对这些API进行反复地设计,再设计 ...

  7. 基于socket.io的实时消息推送

    用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...

  8. ngModelController的方法和属性的使用

    ngModelController方法 $render(); 当视图需要更新的时候会被调用.使用ng-model的指令应该自行实现这个方法. $isEmpty(value); 该方法用于判断输入值是否 ...

  9. js基本知识4

    1. 数组 看电影 电影院 座位 大的变量 里面可以放很多的值 var arr = [1,3,57]; var ar = new Array(); new object(); new Date() v ...

  10. 0070 过滤器调用Spring的bean操作数据库

    假设有这样的需求:将用户每次请求的ip.时间.请求.user-agent存入数据库,很明显可以用过滤器实现,在过滤器中获取到这些数据调用mybatis的mapper存入数据库,但问题来了:mybati ...