您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > OpenCV安装与移植
OpenCV的Ubuntu安装和Smart210_ARM开发板移植软硬件环境:宿主机:Ubuntu10.0432bit开发板:友善之臂Smart210OpenCV:2.4.10其他:cmakeversion2.8.0arm-linux-g++4.5.1/arm-linux-gcc4.5.1查看Ubuntu版本号的指令为:sudolsb_release–a,效果如下图1:图1:查看ubuntu的版本号1.Opencv2.4.10在Ubuntu上安装首先安装必要的软件库安装GCC:sudoapt-getinstallbuild-essential安装Cmake:sudoapt-getinstallcmake安装Git(可选):sudoapt-getinstallgit安装GTK开发版:sudoapt-getinstalllibgtk2.0-dev安装pkg-config:sudoapt-getinstallpkg-config安装Python:sudoapt-getinstallpython3.2-dev安装Numpy:sudoapt-getinstallpython-numpy安装媒体包:sudoapt-getinstallffmpeg安装可选媒体包:sudoapt-getinstalllibavcodec-devlibavformat-devlibswscale-devlibjpeg-devlibpng-devlibtiff-devlibjasper-dev在OpenCV官网下载源码包:在/home/brodon/Documents文件夹下解压缩后,命令行输入cmake-gui,配置opencv的x86版本。具体的操作见图2,注意在安装中,放弃了ffmpeg,OpenGL库的支持。cmake完成后进入opencv-x86文件夹,输入make和makeinstall安装。在安装的过程中出现了许多问题,具体详见后面的错误处理部分。(上面/opencv-2.4.10存放未编译的源码,/opencv-x86存放编译后的文件)图2:Linux-OpenCV安装的Cmake设置(参考:Ubuntu12.04安装Opencv2.4.8上opencv2.4.7cmake2.8.12.1qt4环境搭建)Opencv之make过程中的错误处理(1)解决办法:对opencv-2.4.10/modules/core/src/system.cpp进行修改,将修改为:(参考:core:fixx86PICcodecompilation,)(2)解决办法:通过查看make过程中的错误知道,问题出在/src/cap_ffmpeg_impl.hpp文件中,参考中ffmpeg_build.patch和ffmpeg_build_2.patch对cap_ffmpeg_impl.hpp文件中的出错变量进行替换,重新执行cmake、make步骤仍然出错。只有在cmake配置时将withffmpeg去掉才能正常编译,这样做的目的是使得OpenCV不用ffmpeg提供的功能。很可能是ffmpeg在本机中未正确安装。(参考:Linux下编译Opencv2.3.1遇到的问题)(3)解决办法:将cl2cpp.cmake第50行注释掉,重新编译,顺利通过。(参考:OpenCV:CMakeErrorat/opencv-2.4.9/cmake/cl2.cpp)2.ARM-Linux-OpenCV安装cmake设置如图3所示:图3:ARM-Linux-OpenCV环境的cmake设置其他的与在opencv-x86上的配置一样,配置好后关闭cmake,进入opencv-arm文件后make,makeinstall。注意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:impossibleconstraintin'asm')(2)解决办法:只能在cmake中去掉withQt的选项。(3)错误原因:cmake不认识我定义的arm-linux系统标记,没有加上库pthread和rt的链接选项。解决办法:此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread-lrt。(参考:OpenCV在ARM上的移植)(4)解决办法:在cmake的配置项里面将BUILD_opencv_ocl和WITH_OPENCL的钩取消,如下图所示。(参考:百度文库opencv2.4.9在Hi3531开发板上移植=Ftu1wx5hXgvZx28OX6JSaAoxGsPS-R8-v_nStepdBXy7eeyzfVv0umW26OkE30LUK1OnNGZV1tUZCJ5fUCAIEsYR2e-6xLDRfqRDaif6PgO)3.Linux-OpenCV和ARM-Linux-OpenCV安装测试测试是否成功:将写好的源程序test.cpp分别用如下的两种指令进行编译,结果出现链接库错误,不成功!错误分析:移植:Couldnotreadsymbols解决方法Couldnotreadsymbols:Linux/UNIX系统下编译时,常见的一类报错信息。通常情况下,该编译报错信息之前会给出出现错误的静态库(.a结尾文件)、或动态库(.so结尾文件),该报错的基本原因是当前编译器无法对库文件进行正确的解析。具体的报错信息会在Couldnotreadsymbols:字段后给出,常见的一些报警信息形如:/usr/lib/libdemo.so:couldnotreadsymbols:Fileinwrongformat/usr/lib/libz.a:Couldnotreadsymbols:Badvalue/usr/lib/libcode.a:Couldnotreadsymbols:Invalidoperation/usr/lib/htmlparse.a:couldnotreadsymbols:Archivehasnoindex;runranlibtoaddone/usr/lib/htmlparse.a:couldnotreadsymbols:MalformedarchiveLinux出现Couldnotreadsymbols报警主要原因为当前编译环境和库文件生成时对应的环境不同,由于Linux本身编译选项非常复杂,可以从以下几个方面逐步排查:Couldnotreadsymbols原因和解决方案1、gcc/g++版本不正确众所周知Linuxgcc编译器(GNUCompilerCollection)是功能强大的交叉编译器,但其众多的版本会导致兼容问题。如果所使用的.a/.so文件是由另一个不同版本的gcc编译生成后,当移植到另一个不同版本gcc环境下编译时且编译版本不兼容,会出现Couldnotreadsymbols的报错。(可以使用gcc-v查看一下当前版本)如果是这种原因导致的问题,需要在新gcc版本下,删除(或更名)旧的库文件,重新由src编译生成.a/.so文件,保证gcc版本一致。2、Makefile配置问题查看编译期参数是否缺少-fPIC,不仅是共享库,静态库有时也需要有-fPIC参数或者查看Makefile是否存在前后配置项不一致。例如:/usr/bin/ld:/usr/local/lib/libz.a(crc32.o):relocationR_X86_64_32against`alocalsymbol'cannotbeusedwhenmakingasharedobject;recompilewith-fPIC/usr/local/lib/libz.a:couldnotreadsymbols:BadvalueHOSTCFLAGS=-O3-fPIC./configure//指定编译器参数重新编译HOSTmakeHOSTmakeinstall3、Lib路径错误目标路径的库文件不存在或不一致,也会导致Couldnotreadsymbols错误,可以查看路径和库文件所在位置是否一致,环境变量LD_LIBRARY_PATH中指明库的搜索路径是否有误。(参考:)解决办法:发现无论是安装Linux-OpenCV还是ARM-Linux-OpenCV的cmake的安装目录都采用了默认的方式:CMAKE_INSTALL_PREFIX:/usr/local/include,这导致在后面安装OpenCV-arm时生成的文件会覆盖之前安装Opencv-linux生成的文件,产生错误。输入指令makeuninstall后卸载安装的OpenCV,之后分别将Linux-OpenCV和ARM-Linux-OpenCV的cmake的安装目录改为:重新配置cmake,修改上面的错误后,make和makeinstall即可。可以看出在/usr/local/include文件夹下生成了编译好的两个文件夹:重新测试:测试结果:找不到OpenCV库文件,错误!解决办法:这个错误是没有配置OpenCV库,打开/etc/ld.so.conf.d/opencv.conf,在末尾加入/usr/local/include/opencv_x86/lib,然后命令行输入:sudoldconfig,之后编辑/etc/bash.bashrc加入:PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/include/opencv_x86/lib/pkgconfigexportPKG_CONFIG_PATH编译运行test.cpp测试程序,成功打开摄像头,输出视频流!成功!将程序test.cpp用arm-linux-gcc编译,编译指令为:arm-linux-gccopencv_test.cpp-oopencv_test_arm-I/usr/local/include/opencv_arm/include/opencv-L/usr/local/include/opencv_arm/lib-lopencv_core-lopencv_highgui-lpthrea
本文标题:OpenCV安装与移植
链接地址:https://www.777doc.com/doc-5763466 .html