Linux下移植OpenCV + Qt 到ARM(Tiny6410)总结 转

时间:2021-04-13 12:40:03

这是我的第一篇博客,把我最近做的一个东西和大家分享一下,非常高兴和大家讨论,CSDN是个卧虎藏龙之处,好多特别好的文章,我这里见丑了~~~

 

下面的文字比较多啊,主要是加入了很多自己的感慨啊,感叹啊啥的,其实我觉得已经是罪简单的方法了,我基本上把我遇到的问题全部罗列了,大家可以参考一下~其实很多问题都是在走弯路,我希望后面的人更顺畅一点吧~

 

目的:将OpenCV2.0或者2.1+Qt移植到ARM

目标板Tiny6410

PC系统VM1.2+Fedora9(用这个吧,方便)

  1. 1.       Fedora安装

        Fedora9的包不容易下,不过我忘了我怎么下的···迅雷貌似可以。

我使用的虚拟机,注意必须要高于1.2的版本,只有他们才里面有Fedora的支持。比较方便。就按照提示一步一步走就行了,建议给的空间大一点,默认是20G,给个40G没问题。

         第一个要解决的问题就是虚拟机和PC机的文件拷贝,大家可以参考网上的很多经验,不要用VM tools,我发现传输文件的时候它基本上传输不完全,我用的是网络连接,有两种,在VM的设置里可以找到,安装Fedora的时候也会问你选择Bridge还是NAT,我刚开始用的前者,但后来突然又用不了了,就把VM设置里的改为了NAT,就可以了,至于具体的设置,友善的Fedora安装文档里有。

         我使用Fedora的一个巨大的bug就是它居然只给我的根目录留下了不到一个1G的空间,因为后面要求大部分软件都安装在/opt下,所以没地方!!!!而我的/home文件夹下居然有38个G····我擦! 如果你碰到了这个,那告诉你,节约点用吧,还够用的其实。~  别听教程的把很多软件包都复制到/opt下就可以了,放自己的/home下吧~tar的时候改个源路径就可以了 ~但是目标路径按照手册别变啊!!!

 

  1. 2.       arm-linux-gcc安装

        我用的是arm-linux-gcc-4.5.1(友善之臂光盘里有),各种版本基本上都尝试过,网上建议在编译Qt时用4.1.2版本,我没下载到。安装方法:

        将安装包用sd卡复制到自己的任何目录下,注意我们用的是友善之臂提供的安装包,所以它里面有自己设计的路径,这个非常重要,不能错,它指定安装在/opt下,我们要做的也很简单,只需要将其解压到根目录下,它就可以自动安装到正确的目录。

        建议用root用户登录,方便!!!

        可以直接双击安装包打开,安装到根目录下,解压完检查一下是不是

        /opt/FriendlyARM/。。。。

        这个目录下。然后在PATH路径中加入该安装路径,方法有两种,一种是修改root的/root/.bashrc文件,用gedit打开,或者修改/etc/profile文件,都行,在其中加入

        export PATH=你的安装目录(应该为/opt/FriendlyARM/。。。。/bin):$PATH

        即可,修改前者的话可能要logout重新登录一下,后者用

        source /etc/profile

        命令即可。

 

 

 

  1. 3.       OpenCV移植

移植过2.0和2.1两个版本,应该都问题,问题是路径的设置。

2.0是用configure配置,网上有方法,我用的

http://blog.csdn.net/gfocean/archive/2011/04/22/6341155.aspx

这个网址上的配置,具体为

./configure --host=arm-linux --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --without-gtk --enable-static --disable-shared --disable-apps

没有指定安装路径,全部都安装在/usr/local/下,也可以指定安装路径,见

http://blog.csdn.net/chennxi/archive/2010/12/17/6082039.aspx

 

2.1可以用CMAKE配置,我用的版本是cmake-2.8.4-Linux-i386.tar.tz,网上比较容易下载。

配置方式可以参考

http://blog.csdn.net/noodies/archive/2010/08/09/5798434.aspx

在第一次点configure的时候注意选择第三个选项,然后就可以安装网站说的配置了。

  • 配置后输入make(时间约15分钟),用第二个网站的方法会中途出现错误,自己修改一下文件在make一下就可以了

之后输入make install(很快),就可以在安装路径下找到你的文件了。

如果要在X86上用OpenCV,那么就不能用上面的方法,因为上面都是为了编译用到ARM上的库,但是稍微修改方法也可以生成X86的库。可以参考

http://blog.csdn.net/ranruoyu1003/archive/2010/12/26/6098847.aspx

将编译好的库用sd卡拷到6410的/lib下即可,如果运行有问题(opencv的错误运行时一般会给出让你知道是什么的错误),可以将文件放到和你PC机上目录路径相同的地方。

注意一点:

6410的linux不支持OpenCV自己的Highgui,所以不能在目标板上使用cvNameWidow(),cvWaitKey(),cvShowImage()等显示函数,但是可以利用里面的cvLoad()等函数。正因为如此,安装支持OpenCV的GTK相当复杂,我们选择用Qt来显示。

 

 

  1. 4.       Qt安装

Qt有很多版本,我说说我的经验。在友善的手册里大家要配置linux开发环境需要装的东西真是不计其数···我直接没装了,这也导致我即使按照指示手册一步一步来,也出现了编译的bug。特别是Qaptia2.2···我编译了无数遍,都是到最后bug了···不能这样啊!!!编译一次基本一个小时~~~~时间就这么浪费的啊!!!

我直接用的Qt4.7,这个按照手册上面的方式编译arm版本没有问题~(我一开始用的ubuntu,编译也成功,但是在板子上运行提示错误啊!这直接导致我又装了个Fedora)。

安装手册编译(贼慢啊)完后(注意手册提醒的安装目录)压缩拷到sd卡再解压就可以了~我没有按照手册指示删除来的那个Qt4.7,不过用Fedora编译的话可以删~之后你就可以检验你的库是否移植成功了,祝你好运!

提醒一下,这个地方网上建议用arm-linux-4.1.2,因为很多人用这个编译的Qt没有segmentation fault,我没用,自然就碰到了,不过还好,只有部分语句不能使用,我就用OpenCV代替了···

最后,注意PATH的修改。

 

 

  1. 5.       Qt creator安装

这个东西一定要去下那个422M东东啊,我给个网址

http://get.qt.nokia.com/qtsdk/

我当时下了个68M的吧,结果那个东西没有SDK,结果就找不到我安装的Qt4.7,老是提醒找不到可用的version。

                  这个东西是真好安装,最喜欢了,和windows下一样···好熟悉啊!!!

                  

  1. 6.       OpenCVQt结合的配置

要在Qt里用OpenCV岂是一件容易的事?我差点因为这个就放弃了~~~(>_<)~~~~ 不过如果你没遇到一下的问题,那你千万别告诉我~~~不然会气死我的!!!

1)         Qt pro的配置

需要在你的Qt工程**.pro文件里加入一些话,这个网址可以参考一下

http://www.linuxidc.com/Linux/2010-08/28049.htm

 

2)         最怕编译时出现这个啊

http://www.cnblogs.com/lib/libcv.so,needed by****/*.so  not foud (try use –rpath or –rpath-link)

这个其实是不是个问题呢,我自己解决后发现他也许不是个问题(不会影响到运行),但是可以解决,参考

http://blog.sina.com.cn/s/blog_602f87700100nyda.html

在LFLAGS中后面添加‘:’号再添加和前面一样的那个东东···改到自己的路径就可以了····

 

3)         最后的最后

被segmentation fault缠住了,我不加入OpencV的这些配置时,Qt自己的load(imag)很好使,我成功让lena显示出来了,但是加入OpenCV的东西而且按照上面配置好后,bug就来了···我一度愁苦啊!最后不得不放弃load,而用OpenCV的loadImage····哎 不知道这是何故啊!不过也可以用了,OpenCV能够正常工作,Qt的显示也正常。

 

4)         OpenCV照片用Qt显示的办法

网上查一下很多,但是有个简单的

http://blog.csdn.net/gfocean/archive/2011/04/22/6341155.aspx

最后就是将IplImage转换为QImage格式

    cvCvtColor(img,img,CV_BGR2RGB);

    uchar *imgData=(uchar *)img->imageData;

    image=new QImage(imgData,img->width,img->height,QImage::Format_RGB888);

 

 

 

哎,搞了这么久,写个经验吧~  不枉费了自己的熬夜~~~