交叉编译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. 自己动手写CPU之第四阶段(3)——MIPS编译环境的建立

    将陆续上传本人写的新书<自己动手写CPU>(尚未出版).今天是第13篇.我尽量每周四篇 4.4 MIPS编译环境的建立 OpenMIPS处理器在设计的时候就计划与MIPS32指令集架构兼容 ...

  2. Windows7下搭建Android开发环境

    以后工作中要用到android开发,所以想搭建好开发环境,笔记本装的是win7 准备文件: 1 下载Android SDK http://code.google.com/android/downloa ...

  3. 迅为4412开发板Linux驱动教程——总线_设备_驱动注冊流程具体解释

    视频下载地址: 驱动注冊:http://pan.baidu.com/s/1i34HcDB 设备注冊:http://pan.baidu.com/s/1kTlGkcR 总线_设备_驱动注冊流程具体解释 • ...

  4. IntelliJ IDEA 学习(三):IntelliJ IDEA 快捷键、配置优化

    一.两种方式可以设置快捷键: 1)setting -> keymap 想找到有关Idea工具的菜单或其他功能的话,可以再这里找到对应的快捷键   2)setting -> Editor - ...

  5. 解决CentOS7 无法启动mysql 的解决办法

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方 ...

  6. JMeter学习笔记(四)

    1. 断言 断言组件是通过获取服务器响应数据,然后根据断言规则去匹配这些响应数据:匹配到是正常现象,此时我们看不到任何提醒,如果匹配不到,即出现了异常情况,此时JMeter就会断定这个事务失败,那么我 ...

  7. angularJs 页面定时刷新

    angularJs 页面定时刷新 页面定时刷新并在页面离开时停止自动刷新 var autoRefresh; //自动刷新 autoRefresh = $interval($scope.loadData ...

  8. jquery衬衣产品内容详情页

    html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  9. oracle锁表,杀死进程

    查询锁表数据 select object_name,machine,s.sid,s.serial#from v$locked_object l,dba_objects o ,v$session swh ...

  10. Windows Phone 修改系统定义的资源颜色

    [问题的背景] 相信有些经验的WP研发同学都会遇到下面的问题: 系统控件以及WPToolkit中大量使用了PhoneAccentBrush这个画刷(这个画刷定义的是系统的强调色,即用户选择的主题颜色) ...