赞
踩
想要opencv能够读取视频,必须编译一些解码库。如ffmpeg,而编译ffmpeg又需要一些依赖库。所以在编译opencv之前,我们还需要编译一些相关的库。在编译库时参照了小安崽崽的编译方法。在此表示感谢。
下面就是本人编译所用到的库
linux环境:ubuntu13
arm开发板:tiny6410
交叉编译器:cmake2.8.12.2
opencv版本:2.3.1
libz: zlib-1.2.7
libjpeg: jpegsrc.v7
libpng: libpng-1.2.18
libyasm: yasm-1.2.0
libx264: x264-snapshot-20120608-2245
libxvid: xvidcore-1.3.2
ffmpeg: ffmpeg-0.10.3
1、libz的交叉编译:
# ./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi --shared
最后四行非常重要,否者可能找不到相关库。
进入build目录执行cmake -D CMAKE_TOOLCHAIN_FILE=../toolchain.cmake ../
完成之后查看输出信息,不幸的是FFMPEG 对应的仍然是 NO。也就是说我们先前编译的ffmpeg,此时并没有找到。在安装ffmpeg的路径下lib中生成了一个pkgconfig,此时我们还需要添加PKG_CONFIG_PATH。
export PKG_CONFIG_PATH=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/pkgconfig:$PKG_CONFIG_PATH
之后再回到build目录下执行cmake -D CMAKE_TOOLCHAIN_FILE=../toolchain.cmake ../
此时便会看到FFMPEG对应的是YES
之后再cmake-gui CMakeCache.txt 去掉一些没用的选项,否则编译会出现错误。我最后编译的选项如下,有些选项也不知道是什么意思。也是凭感觉去掉。庆幸的是最后也编译通过了,不知道以后会碰到什么问题。等碰到问题再说吧。
此处CMAKE_INSTALL_PREFIX后面是安装目录,可以根据自己的需要去改。另外PYTHON那一项一定要去掉不然会出错。
此处TITH_TIFF一定要去掉。另外WITH_QT也可以不勾,虽然我们opencv是在qt上运行的。但是我们先前也已经成功移植了qt在开发板上。WITH_V4L一定要勾上,与视频读取有关。之后再configure一下,否则上面的修改并不会生效。上图也是我configure之后的情况。
此时再查看FFMPEG仍然是YES。恭喜你已经距离成功不远了。
然后generate一下,进入opencv2.3.1下的build目录,再执行make。编译开始进行。此时可能还会碰到一个错误。
好像是找不到fabsl,反正错误与fabsl有关,此时
修改OpenCV-2.3.1/modules/flann/include/opencv2/flann/dist.h文件
在第63行的源码:{ return fabsl(x); }改为{ return fabs(x); }。
然后重新make不出意料还会出现一个与pthread有关的错误。
此时需要在build目录下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt
然后再执行make应该不会再碰到问题。祝你好运啊。当然遇到问题也不要害怕,多baidu Google一下。毕竟我当年编译了两个月啊。
make成功之后再执行make install就会安装在上面设置的安装目录下。
然后把安装目录下lib文件夹中的libopencv各种.so文件和先前编译的相关库.so文件打包放到开发板上(执行程序时提示头文件找不到,还需要把opencv头文件也打包过去)。建议一块做成压缩包,否则链接文件可能会丢失。
把压缩包移到开发板之后解压目录要与上面安装目录一致。然后再export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm(/usr/local/arm为解压目录,也是在虚拟机上opencv安装目录)。如果再执行程序时还是显示找不到libopencv各种.so文件,就在根目录下lib即 /lib下再把压缩包里.so文件拷贝过去。当然如果考虑存储空间问题,可以建立软连接。
以上就把opencv交叉编译移植完成了,接下来就是运行例题了。不过tiny6410不支持opencv的cvNameWidow(),cvWaitKey(),cvShowImage()等显示函数,不过幸好支持opencv加载图片和视频的函数。因此,在显示图片时我们需要把opencv的Iplimage图片转换为Qt的QImage图片,然后显示在QT界面上。
运行实例时我们需要一起交叉编译QT和opencv程序。此时需要把opencv的库添加到qt中,以使得qt的qmake时能找到opencv库函数。
移植到开发板上的程序需用QT/Embedded中的qmake进行构建。此时需要找到Qt/Embedded的安装目录。然后再找mkspecs/qws/linux-arm-g++/qmake.conf文件。在里面添加opencv库。 添加方式如下图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。