一个、开发环境

操作系统:fedora14

Opencv版本号:2.0

Qt版本号:4.7

arm:mini6410

交叉编译工具:arm-linux-gcc-4.5.1

二、安装与配置

Linux系统的安装,交叉Qt-creator的安装还有交叉编译工具的安装,网上说的基本都没什么问题,測试后都能够用。

这里安装Qt-Creator遇到了一点小问题,依照网上的和mini6410开发手冊上的安装方法太复杂了。用QtSdk-offline-linux-x86-v1.2.1.run安装方便又准确。

这篇文章重点还是将怎样安装Opencv到linux下,而且配置Opencv到QT中。并实如今x86和arm平台上可以顺利执行qt+Opencv的GUI程序。为将来做嵌入式模式识别搭建一个高速方便的平台。

这里的安装我是參考的Opencv中文网(这站点发现非常靠谱)

http://wiki.opencv.org.cn/index.php/%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91

Opencv2.0下载地址:

1、解压文件:

#tar zxvf opencv-2.0.0.tar.gz

#cd opencv-2.0.0

2、检查软件配置

#./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=g++ CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include LDFLAGS=-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib --with-v4l2 --prefix=/opt/x86/opencv --libdir=/opt/x86/opencv/lib -includedir=/opt/x86/opencv/include

假设提示有须要的软件未安装,请安装后再执行 ./configure 命令。直到提示"Now run make ..."为止。

备注:opencv2.2中已经省去了configure 文件。能够通过cmake安装,參考http://www.samontab.com/web/2010/04/installing-opencv-2-1-in-ubuntu/

3、编译Opencv

#make

4、安装Opencv

#make install

5、更新动态链接库

用root用户运行以下的操作

加入路径/usr/local/lib到文件/etc/ld.so.conf。然后执行命令

#ldconfig

6、測试安装包(在sample/c下)

g++ `pkg-config opencv --libs --cflags opencv` drawing.c -o drawing

这里会出现找不到路径的问题,详细错误例如以下:

Package opencv was not found in the pkg-config search path.

Perhaps you should add the directory containing `opencv.pc'

to the PKG_CONFIG_PATH environment variable

No package 'opencv' found

Package opencv was not found in the pkg-config search path.

Perhaps you should add the directory containing `opencv.pc'

to the PKG_CONFIG_PATH environment variable

No package 'opencv' found

网上有非常多解决的方法,归结究竟就是路径设置问题。

这里我在/root/.bashrc文件里加入例如以下路径就能够编译了

export PKG_CONFIG_PATH=/opt/x86/opencv/lib/pkgconfig:$PKG_CONFIG_PATH

在此编译測试用例,成功后运行命令:

#./drawing

还能够測试其它用比如:

cd samples/c

chmod +x build_all.sh

./build_all.sh

./facedetect --cascade="/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 lena.jpg

以上是x86版opencv的配置安装

以下是arm版opencv的配置安装

export PKG_CONFIG_PATH=/opt/arm/opencv/lib/pkgconfig:$PKG_CONFIG_PATH

第一步,configure的配置

./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include LDFLAGS=-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib --with-v4l2 --prefix=/opt/arm/opencv --libdir=/opt/arm/opencv/lib -includedir=/opt/arm/opencv/include

第二步,编译

Make

出现了例如以下错误:

../3rdparty/.libs/lib_clapack.a(dlasyf.o): could not read symbols: File in wrong format

解决方法:删除3rdparty/.libs/lib_clapack.a这个文件,make clean 后重新启动make编译。

第三步,安装

Make install

成功安装后。在/opt/arm/opencv/lib和/opt/arm/opencv/include文件夹下会生成非常多文件。

第四步,測试

arm-linux-gcc   test.c -o test-arm  -I/opt/arm/opencv/include/opencv  -L/opt/arm/opencv/lib -lml -lcvaux -lhighgui -lcv -lcxcore  -lpthread -lrt

移植opencv2.0到arm上执行./show-arm lena.jpg时的错误:

OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Carbon support. If you are on Ubuntu or Debian,

install libgtk2.0-dev and pkg-config, then re-run cmake or configure script) in

cvNamedWindow, file highgui/window.cpp, line 100

这里说明已经可调用opencv库进行算法运算了。仅仅是没有一个gui的平台供使用。以下我尝试用QT作为这个平台来获取视频。

这篇文章的博主:http://blog.csdn.net/noodies/article/details/5798434

在为网友解答的时候说用的是v412做的视频捕捉,然后再用opencv进行图像处理。最后操作framebuffer显示处理结果(我这里没有尝试了。感觉qt应该更方便一些)

这篇文章说是gtk要先于opencv安装:http://lovelittlebean.blog.163.com/blog/static/11658218620125911268437/

我用的fedora14,没有安装过gtk,可是执行

#pkg-config --modversion gtk+-2.0

能够找到我gtk版本号。

#pkg-config --cflags --libs gtk+-2.0

能够查看gtk编译和链接的信息

这里參考的“源代码安装gtk”博客:http://os.it168.com/a2008/0828/984/000000984646.shtml

搞了这么多都没搞清楚gtk究竟是干嘛用的,在以下博文中有提到过

http://blog.csdn.net/yanzi1225627/article/details/7524698

出现gtk等那就对了的字样。但还不知道什么意思,怎样解决接着就写到qt的配置去了。于是我就先配置qt,这里的qt配置我參照的博文是:

http://blog.chinaunix.net/uid-24641004-id-3459705.html

后来我知道gtk事实上就是一种gui

执行opencv打开摄像头,不知道是这个博主的qt版本号不一样还是写漏了。在执行时提示Qdebug运用错误,找到代码F1进入函数文档,发现缺少它的头文件include <QtDebug>,加上就OK了。

还提示.pro不能找到lib**.so的库,进去查看发现配置的时候多了一个空白行,意思就是libs+=的lib库加入多行一定要加“\”。我多了一个空白行。

在执行就出现“error!

查看代码中这是Qdebug的错误提醒,我直接改动成“error:can not open camero!”。

这样就一目了然了。

解决的方法当然就是插入摄像头了。

在编译执行,头像出现了

以下就看怎样移植到arm上了。

改动.pro为arm版的头文件和库文件编译自己的小程序,这个之前编译生成的,我分别用x86和arm区分开来的。

又一次编译,然后复制到开发板上执行。

头疼的事情出现了。出现segmentation fault段错误。麻烦了,解决方法博文

http://www.cnblogs.com/s_agapo/archive/2011/11/24/2262346.html

中有提到一点,可是不适合我的程序。他仅仅是先是一张图片将qt自带的load函数换成opencv的loadImage。

最后在博文:

http://blog.csdn.net/yanzi1225627/article/details/8215695

提到的评论中,一个女娃告诉他将capture = cvCreateCameraCapture(-1)中的-1设置成202就ok了,试了下真能够,尽然成功了。到眼下也还不知道202代表啥意思。

执行结果例如以下:

到眼下为止。发现基本已经调通了这整个平台的环境搭建。

以下尝试运用了一下他的算法,做了个人脸检測。

也遇到了一些问题如:

编译x86版本号的qt程序。执行无问题。可是在编译arm版本号的qt程序时。出现错误error: main.o: Relocations in generic ELF (EM: 3)

解决的方法:进入project文件夹运行make clean,清理一下在编译就ok了。

还出现cvWaitkey(0)的错误,我猜的可能是这个函数在arm平台下确实有点问题吧,我就凝视了,由于仅仅是个等待函数。最后执行成功了,可是视频变得有点卡。不像在x86下执行那么顺畅,难道是我凝视了cvWaitkey的原因,还要继续优化。

贴上结果图片:

这里提出自己的问题,希望有缘人假设攻克了可以告知我。開始我是安装的Opencv2.4.2版本号,安装完毕后,编写简单的Opencv程序进行交叉编译,但总是编译不通过(这里的安装參考的文库:http://wenku.baidu.com/link?url=Wj9y2srglzlvSkGN2m6Yyg89VU9yM16akMcx18lXO8ii8YA6klOaxfeq1zsaY4QNilqJZogvb6YTA6iJ0NiDP6yYnGe9ICQPQS_ThXNCNlm)

移植opencv2.4.2编译arm程序时

arm-linux-g++ -o opencv_test opencv_test.cpp -I /usr/local/arm/opencv/include/opencv -L /usr/local/arm/opencv/lib -lopencv_core -lopencv_highgui

出现例如以下错误:

/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libcxcore.so, needed by /usr/local/arm/opencv-2.1/lib/libcv.so, not found (try using -rpath or -rpath-link)

/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libcv.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)

/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libhighgui.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)

/usr/local/arm/4.3.2/bin/../lib/gcc/arm-none-linux-gnueabi/4.3.2/../../../../arm-none-linux-gnueabi/bin/ld: warning: ../../lib/libml.so, needed by /usr/local/arm/opencv-2.1/lib/libcvaux.so, not found (try using -rpath or -rpath-link)

读了这边作者的博文:http://blog.csdn.net/yanzi1225627/article/details/7524698。发现他遇到的和我类似的问题,且尝试了多种方式也没能解决,终于我也和他一样走向了放弃Opencv2.4.2的道路。转向Opencv2.0。当中也尝试了他提供的解决方法,并參考博文:http://blog.sina.com.cn/s/blog_602f87700100nyda.html

在交叉编译中LFLAGS即-L换成-Wl,-rpath-link -Wl,发现这个问题是不见了。可是尽然出现了找不到.so的库文件,我也无语了,这在之前已经解决的问题又回来了,拷贝了库也设置了路径,老问题又出现了,被打回十年前的感觉非常痛苦。

arm-none-linux-gnueabi缺少这种库,拷贝过去即可了。发现不行,且这篇文库尼玛是复制的之前好几个博主的文章,原文不动。都不知道有没有试过。

没办法仅仅能放弃Opencv2.4.2了。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

opencv在arm和x86在移植的更多相关文章

  1. OpenCV在ARM上的移植

    OpenCV在ARM上的移植 与X86 Linux类似,请参考:Linux 下编译安装OpenCV 本文在此基础上进行进一步操作. 网络上很多移植编译的方法比较老,多数针对OpenCV 1.0,而且方 ...

  2. OPENCV在ARM平台的移植

    两篇别人推荐给我的文章,我想直接复制过来,呵呵,但一想真不好,等我做一遍了再来写一遍.还是贴链接. OpenCV在ARM上的移植:http://www.cnblogs.com/emouse/archi ...

  3. ARM与X86 CPU架构对比区别

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是  CISC要用最少的机器语言 ...

  4. ARM、X86/Atom、MIPS、PowerPC

    关注Android的时候,有一些CPU架构方面的术语知识,主要有:ARM.X86/Atom.MIPS.PowerPC1)ARM/MIPS/PowerPC均是基于精简指令集(RISC,Reduced I ...

  5. ARM与X86架构的对决[整编]

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是  CISC要用最少的机器语言 ...

  6. ARM与x86 CPU架构对比

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是CISC要用最少的机器语言指令 ...

  7. ARM与X86 CPU架构区别

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是 CISC要用最少的机器语言指 ...

  8. ARM和X86功耗差别的深层原因探讨

    ARM和X86功耗差别的深层原因探讨 ARM和X86功耗的差别一直是个很热的话题.ARM可以做的很低,甚至1瓦都不到.而X86服务器的芯片可以达到100-200瓦,就算是嵌入式处理器Atom系列也需要 ...

  9. 【转】深入了解CPU两大架构ARM与X86

    来自:https://blog.csdn.net/u014641018/article/details/53484565 重温下CPU是什么 中央处理单元(CPU)主要由运算器.控制器.寄存器三部分组 ...

随机推荐

  1. Vb.net/VB 声明API功能父窗口功能

    回想第一次敲房费,他说自己是api函数实现父窗口及其子窗口最小化的功能.现在再次遇到,自己就在思考,能不能继续使用API函数呢?答案当然是Of Course! 事实上细致看两者并没有多大的差别,先看看 ...

  2. SVM-SVM概述

    (一)SVM背景资料简介 支持向量机(Support Vector Machine)这是Cortes和Vapnik至1995首次提出,样本.非线性及高维模式识别中表现出很多特有的优势,并可以推广应用到 ...

  3. PDO进行sql报表编制结果集介绍及操作(两)

    <span style="font-size:18px;">一个:运行准备好的语句和绑定参数insert try { $pdo=new PDO("mysql: ...

  4. ASP.NET之Cookie(坑爹的Response.Cookies.Remove)

    原文:ASP.NET之Cookie(坑爹的Response.Cookies.Remove) 在web开发中Cookie是必不可少的 .NET自然也有一个强大的Cookie操作类,我们用起来也非常方便, ...

  5. Debug with Eclipse

    In this post we are going to see how to develop applications using Eclipse and Portofino 4. The trad ...

  6. HDU 1856 More is better(并查集+离散化)

    题目地址:HDU 1856 水题.因为标号范围太大,而数据数仅仅有10w,所以要先进行离散化.然后就是裸的并查集了. 代码例如以下: #include <iostream> #includ ...

  7. Python多线程的threading Event

    Python threading模块提供Event对象用于线程间通信.它提供了一组.拆除.等待用于线程间通信的其他方法. event它是沟通中最简单的一个过程之中,一个线程产生一个信号,号.Pytho ...

  8. Android架构分析之LOG模块

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 Andro ...

  9. Blend4精选案例图解教程(二):找张图片玩特效

    原文:Blend4精选案例图解教程(二):找张图片玩特效 Blend中的特效给了我们在处理资源时更多的想象空间,合理地运用特效往往会得到梦幻般效果,本次教程展示对图片应用特效的常规操作,当然特效不仅限 ...

  10. FusionCharts简明教程(一)---建立FusionCharts图形

    由于该项目需要的报告需要做的事情,选择FusionCharts作为一种工具. 由于该报告没有任何接触,网上有没有更具体fusionCharts课程,所以我们决定做一个彻底的研究FusionCharts ...