历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2020年02月06日 | opencv在arm和x86移植

2020-02-06 来源:eefocus

一个、开发环境

操作系统: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?imageView2/2/w/550

 

以上是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?imageView2/2/w/550时的错误:

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 ,加上就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了。

推荐阅读

史海拾趣

Danaher Corporation公司的发展小趣事

在十九世纪80年代,丹纳赫集团面对日益严峻的市场竞争,开始推行以精益生产为核心的全新运营方式。这种管理方式不仅强化了其在行业中的领导地位,还逐渐形成了独特的丹纳赫商业系统(Danaher Business System,DBS)。DBS注重持续改进、客户导向和团队合作,成为丹纳赫集团在电子行业取得成功的关键因素。

Barkston Plastics Engineering Ltd.公司的发展小趣事

随着环保意识的日益增强,Barkston Plastics Engineering Ltd.积极响应行业趋势,致力于研发和生产环保型塑料电子元件。公司投入大量资源研发可降解和可回收的塑料材料,并将其应用于产品中。这一举措不仅赢得了客户的认可,也提升了公司的品牌形象,使其在竞争激烈的电子行业中脱颖而出。

EOREX公司的发展小趣事

在电子行业的早期,EOREX公司由一群热衷于技术创新的工程师创立。他们专注于研发高性能的半导体芯片,以满足当时市场对更快、更稳定电子产品的需求。通过不断的技术创新和产品迭代,EOREX逐渐在半导体领域树立了良好的口碑,吸引了众多合作伙伴和投资者的关注。随着公司规模的扩大,EOREX不断加大对研发的投入,推出了更多具有竞争力的产品,逐渐在电子行业中崭露头角。

High Tech Chips Inc公司的发展小趣事

随着环保意识的日益提高,EOREX公司积极响应国家的绿色发展战略,将环保理念融入到产品研发和生产过程中。他们采用环保材料和绿色生产工艺,减少产品对环境的影响。同时,EOREX还加大了对环保技术的研发投入,推出了一系列具有环保功能的电子产品。这些举措不仅提升了公司的品牌形象和社会责任感,还为公司的可持续发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示一个电子公司可能的发展路径和策略。在实际应用中,每个公司的发展故事都有其独特性和复杂性。

台湾晶豪(ESMT)公司的发展小趣事

晶豪科技一直积极寻求与国内外企业的合作机会。通过与合作伙伴的紧密合作,公司不断拓展业务领域,进入了模拟及混合讯号IC领域。目前,公司提供的产品包括音讯转换器(ADC/DAC)及D类音频放大器等IC。这些新产品的推出不仅丰富了公司的产品线,还为客户提供了更多样化的选择。同时,通过与合作伙伴的资源共享和优势互补,晶豪科技在技术研发和市场拓展方面取得了更多突破。

AMI Semiconductor公司的发展小趣事

在成功建立DRAM产品线后,晶豪科技又进一步进军闪存市场。公司成功完成了多种容量及接口类型的NOR Flash及NAND Flash的开发,满足了各种特定应用系统的需求。特别是NOR Flash产品,以其更快的速度、更高的安全性、低功耗高存储密度和不断降低的成本等优质特性,在市场上取得了显著成果。

问答坊 | AI 解惑

DIY显存8M的单片机显卡设计需求

DIY显存8M的单片机显卡设计需求能具体指出来吗?比如硬件方面:PCB板尺寸、是否允许两面贴、多少层板?软件方面:要做哪些功能模块等…

查看全部问答>

参加福禄克仪器展示交流会,解决精密测试校准难题

        随着各种项目研发时间日趋减少,对设计人员在有限的时间内快速精确测试分析提出了新的要求。福禄克公司一直致力于和中国市场共同发展,不断将更多全球领先的技术和仪器引进中国电子测量市场,向中国市场和用 ...…

查看全部问答>

sc32410(下位机)+MC35I+PC(上位机)

  我想用S3C2410控制GPRS模块向远程PC发送数据,PC作为监控中心,采用的VC#平台的SOCKET来实现接受网络数据,那么能否在S3C2410上通过MC35I的AT命令来写客户端的SOCKET呢?怎样写?急…

查看全部问答>

关于s3c2410x.h

请问谁有周立功的WINCE50下的2410的BSP 我的BSP中缺一个文件s3c2410x.h…

查看全部问答>

为什么我有一简单程序,需要点一下开始键再关一下开始键才能显示出来呢.

//最简单最简洁的一个程序了,请直接看WM_PAINT消息里的代码 #include #include const TCHAR szAppName[]=TEXT(\"HelloCE\"); HINSTANCE hInst; LRESULT CALLBACK MainWndProc(HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) { HDC hdc ...…

查看全部问答>

新手问题关于开发环境的配置

尽管网上很多地方都在提到过这个环境配置的问题 但不知道是我笨还是哪里弄的不太清楚或是不对,最终没能正确的编译我的工程.. 所以无奈间还是要劳繁哪位大哥在这再给小弟说一下,在此先行谢过~ 我现在的环境是: 操作系统:winXP(不知道这个有没 ...…

查看全部问答>

免费赠送一套MSP-EXP430G2 开发板

手上有两套MSP-EXP430G2 开发板,放着也是浪费,决定送出一套,给有需要的朋友。   大家可以申请,最终由EEWORD论坛决定由谁取得资格,此板不是试用,是赠送。     不过限制顺丰快递能到达地区,运费到付。   我在江苏 ...…

查看全部问答>

USB2.O设备PCB设计要点

在绘制USB2.O设备接口差分线时,应注意以下几点要求:①在元件布局(PCB Layout)时,应将USB2.O芯片放置在离地层最近的信号层,并尽量靠近USB插座,缩短差分线走线距离。②差分线上不应加磁珠或者电容等滤波措施,否则会严重影响差分线的阻抗。③ ...…

查看全部问答>

基于单片机的音乐喷泉的设计问题

最近在做毕业设计,但是音乐喷泉的模拟音源想了好久也没解决了,希望大虾们能支援一下,不胜感激!!!…

查看全部问答>

好的,我来扯一个其实不怎么技术的技术问题

现在接近1点了。嗯嗯。。。额,我好像有一段时间没写博客了。事实上,我懒的写。不过好吧,技术话题除外。其实没啥技术含量。现在摆在我面前的,最要紧的一件事情是我的毕业设计。事实上它已经七七八八了,除了一个nRF24L01的无线数传模块。简单的 ...…

查看全部问答>