linux下qt+opencv、arm端移植opencv
linux下qt+opencv、arm端移植opencv
团队要做一个嵌入式定位的项目,arm端的工作进行一些图像采集、图像预处理,及多种通信接口管理、GUI显示、人机交互等工作。首先先把opencv移植来进行一些实验测试。
本文记录下在linux下移植opencv及arm端移植的过程。
qt的安装过程参考前面转载的一篇文章 http://blog.csdn.net/yuechuxuan/article/details/78216735
一、Linux下移植opencv配合qt使用
(1)首先更新源,sudo update sudo upgrade
然后下载opencv编译过程中用到的一些包,搜索一下与opencv相关的有好多。这里我安装了其中的一些,sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev
pkg-config。
下载cmake,cmake-qt-gui
sudo apt-get install cmake cmake-qt-gui
(2)下载opencv包
我是在opencv官网下载的opencv2.4.11 for linux。下载后解压进入,opencv-2.4.11目录下,执行cmake-gui
点击Configure
Generate后进入 opencv-x86目录下 执make
make install 在/usr/local/lib下会出现编译好的lib文件。
(3)安装完成后对系统变量进行配置
sudo gedit /etc/ld.so.conf.d/opencv.conf
在其中添加/usr/local/lib 保存后执行sudo ldconfig
sudo gedit /etc/bash.bashrc
在其中添加PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
(4)测试运行一下
在.pro文件中添加
INCLUDEPATH+=/usr/local/include\
/usr/local/include/opencv\
/usr/local/include/opencv2
LIBS += /usr/local/arm/libopencv_highgui.so \
/usr/local/arm/libopencv_core.so \
/usr/local/arm/libopencv_imgproc.so
运行后结果出现一个框
测试完毕,linux下qt+opencv搭建成功。
二、 arm端移植opencv
1.新建opencv-arm目录,进入opencv-2.4.9执行cmake-gui
2.点击Configure,保持unixmakefiles选项,选择specify options for corss-compiling来选择编译器路径
3.operating system填入os名,即编译器名arm-linux os version这个可以不填,我不清楚这个填内核版本还是编译器版本,compilers C填入编译器arm-linux-gcc的elf路径,C++填入编译器arm-linux-g++的elf路径,target root是寻找lib和include文件的,这些文件都在arm-linux编译器文件路径下
4.去掉WITH_TIFF WITH_CUDA,修改CMAKE_BUILD_TYPE为Release为要生成文件的路径, 修改CMAKE_INSTALL_PREFIX,去掉WITH_OPENGL,修改CMAKE_FIND_ROOT_PATH为Linux安装库的路径
5.点击generate,进入到opencv-arm/CMakeCache.txt下找到CMAKE_EXE_LINKER_FLAGS:STRING='',
CMAKE_EXE_LINKER_FLAGS原来为空,在该行添加-lpthread -lrt -ldl三个参数。
6.执行make
make install
三、出现的问题
1.cmake-gui时出现
error in configuration process ,project files may be invalid
查阅了好多资料终于解决了,在cmake-gui设置好然后configure的时候,刚刚开始就出现了这个错误,往前翻了一下具体的错误,发现有这么一项 make:arm-linux-g++:Command not found 命令找不到(忘记截图了) ,然后我又在终端里 输入 arm-linux-g++ -v ,出现 no such file or directory , 此时问题终于找到了, 就是gcc和g++命令找不到,但是我已经交叉编译过了,环境变量也设置了,为什么还是找不到呢?最后终于发现是因为我的Linux系统是64位的,64位机与32位机不兼容,需要安装sudo apt-get install ia32-libs(这个只是网络版本),我输入sudo apt-get install ia32-libs时出现
Package ia32-libs is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
lib32z1 lib32ncurses5 lib32bz2-1.0
E: Package 'ia32-libs' has no installation candidate
所以我就输入 apt-get install lib32z1 ,同样解决了问题
然后继续configure,如果还有错误,请参考下面的问题2
2.在configure的过程中出现
CMake Error at cmake/FindCUDA.cmake:762(if):
if given arguments:
"CUDA_VERSION""VERSION_GREATER" "5.0" "AND""CMAKE_CROSSCOMPILING" "AND" "MATCHES" "arm""AND" "EXISTS""CUDA_TOOLKIT_ROOT_DIR-NOTFOUND/targets/armv7-linux-gnueabihf"
Unknown arguments specified
Call Stack (most recent call first):
cmake/OpenCVDetectCUDA.cmake:26(find_package)
cmake/OpenCVFindLibsPerf.cmake:24 (include)
CMakeLists.txt:423 (include)
这个CUDA有问题,看看WITH_CUDA默认确实是选中的,在上面的框中去掉WITH_CUDA的√,继续configure
4.我第一次安装的版本是opencv3.8.0,但是把在make的过程中出现
make[2]: *** [modules/imgproc/CMakeFiles/opencv_imgproc.dir/src/drawing.cpp.obj] Error 1
make[1]: *** [modules/imgproc/CMakeFiles/opencv_imgproc.dir/all] Error 2
make: *** [all] Error 2
试了很多种方法也没有解决,最后觉得应该是opencv的版本太高了,动态库的链接有问题,也没有解决,不知道是什么原因,还是用低版本的吧!
另外还有一些用到的命令
sudo apt-get install libxext-dev libxt-dev libxrender-dev libxdamage-dev libgl1-mesa-dev libglu1-mesa-dev libdbus-1-dev libgconf2-dev libicu-dev libedbus-dev
qt PC端安装完成后还要进行如下操作
安装完成后一般还要修改一些配置。
在命令行中输入:sudo vi /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf
打开default.conf文件,
将第一行改为bin目录的路径,第二行改为qt5.8.0目录的路径。
保存退出。
然后在命令行中输入:sudo apt-get install libgl1-mesa-dev
安装 libgl1-mesa-dev
参考的文章
http://blog.csdn.net/jd404647184/article/details/45745535
http://blog.csdn.net/jakeo0o/article/details/54584199
http://www.cnblogs.com/emouse/archive/2013/04/01/2993842.html