OpenCV安装与移植
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OpenCV的Ubuntu安装和Smart210_ARM开发板移植
软硬件环境:
宿主机:Ubuntu 10.04 32bit
开发板:友善之臂Smart210
OpenCV:2.4.10
其他:
cmake version 2.8.0
arm-linux-g++ 4.5.1 / arm-linux-gcc 4.5.1
查看Ubuntu版本号的指令为:sudo lsb_release –a,效果如下图1:
图1:查看ubuntu的版本号
1.Opencv
2.4.10在Ubuntu上安装
●首先安装必要的软件库
安装GCC:sudo apt-get install build-essential
安装Cmake:sudo apt-get install cmake
安装Git(可选):sudo apt-get install git
安装GTK开发版:sudo apt-get install libgtk2.0-dev
安装pkg-config:sudo apt-get install pkg-config
安装Python:sudo apt-get install python3.2-dev
安装Numpy:sudo apt-get install python-numpy
安装媒体包:sudo apt-get install ffmpeg
安装可选媒体包:
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev
●在OpenCV官网下载源码包:/
●在/home/brodon/Documents文件夹下解压缩后,命令行输入cmake-gui,配置opencv的x86版本。
具体的操作见图2,注意在安装中,放弃了ffmpeg,OpenGL 库的支持。
cmake完成后进入opencv-x86文件夹,输入make 和make install安装。
在安装的过程中出现了许多问题,具体详见后面的错误处理部分。
(上面/opencv-2.4.10存放未编译的源码,/opencv-x86存放编译后的文件)
图2:Linux-OpenCV安装的Cmake设置
(参考:Ubuntu12.04安装Opencv2.4.8
/s/blog_8af6bbd10101hgg2.html
linux ubuntu12.04上opencv2.4.7 cmake2.8.12.1 qt4环境搭建
/jiebaoabcabc/article/details/22825411) Opencv之make过程中的错误处理
(1)
解决办法:
对opencv-2.4.10/modules/core/src/system.cpp进行修改,将
修改为:
(参考:core: fix x86 PIC code compilation,https:///Itseez/opencv/commit/ea50be0529c248961e1b66293f8a9e4b807294a6)(2)
解决办法:
通过查看make过程中的错误知道,问题出在/src/cap_ffmpeg_impl.hpp文件中,参考 https:///trac/opencv/ticket/1020中ffmpeg_build.patch 和 ffmpeg_build_2.patch 对cap_ffmpeg_impl.hpp文件中的出错变量进行替换,重新执行cmake 、make步骤仍然出错。
只有在cmake配置时将with ffmpeg去掉才能正常编译,这样做的目的是使得OpenCV不用ffmpeg提供的功能。
很可能是ffmpeg在本机中未正确安装。
(参考:Linux下编译Opencv2.3.1遇到的问题
/xizero00/article/details/7386695)(3)
解决办法:
将cl2cpp.cmake第50行注释掉,重新编译,顺利通过。
(参考:OpenCV : CMake Error at /opencv-2.4.9/cmake/cl2.cpp /questions/23866852/opencv-cmake-error-at-opencv-2-4-9-cmake-
cl2-cpp)2.ARM-Linux-OpenCV安装
cmake设置如图3所示:
图3:ARM-Linux-OpenCV环境的cmake设置
其他的与在opencv-x86上的配置一样,配置好后关闭cmake,进入opencv-arm文件后make,make install。
注意make过程中的错误!
ARM-Linux-OpenCV之make过程错误
(1)
解决办法:
Makefile里面“QMAKE = 选项”指定的qmake 路径错误。
默认的路径为:/usr/bin/qmake,在ARM上的路径应该是/usr/local/Trolltech/QtEmbedded-4.7.0-arm/bin/qmake。
修改后问题解决。
(参考:QT经典错误:/usr/include/qt4/QtCore/qatomic_i386.h:132: error: impossible constraint in
'asm' /jidonghui/article/details/7161281)(2)
解决办法:只能在cmake中去掉with Qt 的选项。
(3)
错误原因:cmake不认识我定义的arm-linux系统标记,没有加上库pthread 和rt的链接选项。
解决办法:
此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt。
(参考:OpenCV在ARM上的移植
/emouse/archive/2013/04/01/2993842.html)(4)
解决办法:
在cmake的配置项里面将BUILD_opencv_ocl和WITH_OPENCL的钩取消,如下图所示。
(参考:百度文库opencv2.4.9在Hi3531开发板上移植/link?url=Ftu1wx5hXgvZx28OX6JSaAoxGsPS-R8-v_nStepdBXy7ee yzfVv0umW26OkE30LUK1OnNGZV1tUZCJ5fUCAIEsYR2e-6xLDRfqRDaif6PgO)
3.Linux-OpenCV和ARM-Linux-OpenCV安装测试
测试是否成功:将写好的源程序test.cpp分别用如下的两种指令进行编译,结果出现链接库错误,不成功!
错误分析:移植: Could not read symbols解决方法
Could not read symbols:Linux/UNIX系统下编译时,常见的一类报错信息。
通常情况下,该编译报错信息之前会给出出现错误的静态库(.a结尾文件)、或动态库(.so结尾文件),该报错的基本原因是当前编译器无法对库文件进行正确的解析。
具体的报错信息会在Could not read symbols:字段后给出,常见的一些报警信息形如:
/usr/lib/libdemo.so: could not read symbols: File in wrong format
/usr/lib/libz.a: Could not read symbols: Bad value
/usr/lib/libcode.a: Could not read symbols:Invalid operation
/usr/lib/htmlparse.a: could not read symbols: Archive has no index; run ranlib to add one
/usr/lib/htmlparse.a: could not read symbols: Malformed archive
Linux出现Could not read symbols报警主要原因为当前编译环境和库文件生成时对应的环境不同,由于Linux本身编译选项非常复杂,可以从以下几个方面逐步排查:
Could not read symbols原因和解决方案
1、gcc/g++版本不正确
众所周知Linux gcc编译器(GNU Compiler Collection)是功能强大的交叉编译器,但其众多的版本会导致兼容问题。
如果所使用的.a/.so文件是由另一个不同版本的gcc编译生成后,当移植到另一个不同版本gcc环境下编译时且编译版本不兼容,会出现Could not read symbols的报错。
(可以使用gcc -v 查看一下当前版本)
如果是这种原因导致的问题,需要在新gcc版本下,删除(或更名)旧的库文件,重新由src编译生成.a/.so文件,保证gcc版本一致。
2、Makefile配置问题
查看编译期参数是否缺少-fPIC ,不仅是共享库,静态库有时也需要有-fPIC 参数
目标路径的库文件不存在或不一致,也会导致Could not read symbols错误,可以查看路径和库文件所在位置是否一致,环境变量LD_LIBRARY_PATH 中指明库的搜索路径是否有误。
(参考:/uid-23381466-id-3828614.html)解决办法:
发现无论是安装Linux-OpenCV还是ARM-Linux-OpenCV的cmake的安装目录都采用了默认的方式:CMAKE_INSTALL_PREFIX:/usr/local/include,这导致在后面安装OpenCV-arm时生成的文件会覆盖之前安装Opencv-linux生成的文件,产生错误。
输入指令make uninstall后卸载安装的OpenCV,之后分别将Linux-OpenCV 和ARM-Linux-OpenCV的cmake的安装目录改为:
重新配置cmake,修改上面的错误后,make和make install即可。
可以看出在/usr/local/include文件夹下生成了编译好的两个文件夹:
重新测试:
测试结果:找不到OpenCV库文件,错误!
解决办法:
这个错误是没有配置OpenCV库,打开/etc/ld.so.conf.d/opencv.conf,在末尾加入/usr/local/include/opencv_x86/lib,然后命令行输入:sudo ldconfig,之后编辑/etc/bash.bashrc加入:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/include/opencv_x86/li b/pkgconfig
export PKG_CONFIG_PATH
编译运行test.cpp测试程序,成功打开摄像头,输出视频流!成功!
将程序test.cpp用arm-linux-gcc编译,编译指令为:arm-linux-gcc opencv_test.cpp -o opencv_test_arm -I /usr/local/include/opencv_arm/include/opencv -L /usr/local/include/opencv_arm/lib -lopencv_core -lopencv_highgui -lpthread –lrt,得到如下结果,同时生成ARM下的可执行文件。
如下图所示,给出的警告是: "warning: ../../lib/libopencv_core.so, needed by /usr/local/arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)",
意思是说找不到相应的.so动态库文件,可是该目录下明明已经有了,参考了/yr119111/article/details/7732336#中的两种消除warning的办法。
(先把ARM-OpenCV下的lib文件全部考到你的交叉编译器的lib目录下。
重新编译,把warning去掉。
)
(参考:/topics/390206286 opencv在arm和x86上的移植/yzysj123/article/details/38307825)4.OpenCV的Smart210_ARM开发板移植
将/home/broadon/Documents/opencv-arm下的lib文件夹(即生成的库文件),拷贝到开发板对应目录即可。
运行程序:./opencv_test_arm出错!错误原因是:由于开发板中没有可以用于图像显示界面的库,比如GTK等等。
可以通过安装GTK或者使用QT来显示图像解决这个问题。
(参考:移植Opencv到Arm开发板中
/u014472566/article/details/38533759)问题原因:arm对opencv的highgui支持很差,导致highgui的功能不能用,而测试程序里面有用到highgui的功能,所以出错。
可以选择Qt来做图形界面(图形界面主要在调试时起作用)。
5.总结
基本弄清了两种版本的OpenCV的安装流程以及如何改错,对于OpenCV 的ARM移植准备选择低版本的OpenCV2.0,以及用Qt-gui来替代highgui的功能。
附录:经验总结
(1)Ubuntu提示磁盘空间不足怎么解决
在VMware虚拟机的Ubuntu上编译OpenCV后,多次提示磁盘空间不足,出现死机现象,重启机器,进入登录界面。
Ubuntu登陆时出现错误:
进入登录界面,登录界面完全变成一个比较简陋的版本,并提示“ubuntu install problem the configuration defaults for gnome power manager have not been installed correctly, please contact your computer administrator.”信息,多次重启后仍出现该问题。
问题解决:磁盘空间不足,释放磁盘空间。
ubuntu启动时Ctrl+Alt+F1进入命令行模式。
输入用户名与密码,接着输入命令df -lh ---查看磁盘空间使用情况命令,然后可以通过rm -rf 删除一些文件和文件夹。
删除不必要的文件(这个根据自己的需求)
●清理下载的缓存包
我们在Ubuntu 中通过sudo apt-get install 安装软件时,其下载的包都缓存在/var/cache/apt/archives/ 目录中。
如果要清理掉这些已下载的缓存包,那么可以执行命令:
sudo apt-get autoclean
sudo apt-get clean
●清理不再需要的包
我们知道,在Ubuntu 系统中安装软件时,该软件的依赖通常也会自动安装上。
那么,在我们删除该软件后,其依赖可能需要我们手动删除之。
你可以运行sudo apt-get autoremove 命令来解决这个问题。
(参考:/gavin_dinggengjia/article/details/6332922)●通过VirtualBox扩展硬盘
(参考:/s/blog_4c02ba150101bhqx.html)●一个更有效的方法(非常有效!)
利用Ubuntu提供的磁盘分析器,查看哪些地方磁盘利用率高,发现
文件夹下有大量的垃圾文件(高达6.9G),在磁盘分析器里面,单击鼠标右键(move to trash)删除后还是会再生,只有在该文件夹下用rm –r filename才有用。
至此,获得6.9G的磁盘空间。
(2)解决arm-linux-gcc找不到的问题
解决方法:在主目录下输入find / -name arm-linux-gcc,此时会查找arm-linux-gcc的安装路径,如/opt/FriendlyARM/toolschain/4.5.1/bin/。
此时输入:export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,即可使用arm-linux-gcc编译程序了。
其他参考:
opencv2.2 交叉编译及在arm开发板测试
/sun_x_t/article/details/7261944
Linux OpenCV移植过程详细介绍
/wc7620awjh/article/details/8268447
ARM开发板OK6410移植opencv-2.4.7库qt界面显示(附加各种问题解决方案)
/jiebaoabcabc/article/details/22935185
linux ubuntu12.04上opencv2.4.7 cmake2.8.12.1 qt4环境搭建
/jiebaoabcabc/article/details/22825411
OpenCV在ARM上的移植
/emouse/archive/2013/04/01/2993842.html
编译OpenCV for arm-linux 转
/s_agapo/archive/2012/03/08/2385285.html
opencv在arm和x86上的移植
/yzysj123/article/details/38307825
OpenCV移植到ARM 全过程
/jemofh159/article/details/7553747
基于OpenCV的ARM嵌入式网络视频监控系统
/plus/view.php?aid=841
编译OpenCV for arm-linux
/noodies/article/details/5798434
opencv2.2 交叉编译及在arm开发板测试
/sun_x_t/article/details/7261944
OpenCV在ARM上的移植错误总结
/baolong_zhu/blog/static/1963110912014530108635/。