QT+opencv环境搭建
这是我以前做的一个项目经历,虽然是个不太大的项目,但感觉做完这个项目收获不少知识,
过程中也解决可一些这样那样的问题,也走过一些弯路。
回过头来就想把一些经历的一些小挫折,完成项目的一些经验分享给大家,希望能帮到大家,无论工作也好,学习也好能提高些效率。
项目简介:开发板上芯片是arm A8架构的,开发板连接摄像头,连接一个8寸显示屏。连接上摄像头,点开应用程序,会看到一个四格窗口界面,窗口显示视频画面等
窗口用QT来画,图像识别需要调用openCV的库函数。还要用到TCP/UDP协议传输图片。
开发环境:
Intel x86主机
Ubuntu 10.04操作系统
arm开发板
源码包:
开发板自带资料 arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
官网下载 qt-everywhere-opensource-src-4.6.2.tar.gz
官网下载 cmake-2.8.8-Linux-i386.tar.gz
官网下载 opencv-2.4.6.1.tar.gz
经验过程:
1、安装交叉编译工具
2、编译安装QT
3、编译安装openCV
4、验证程序
下面将依次介绍
1、安装交叉编译工具链
把arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz放在~/Tiny210/Linux 目录下
$cd ~/Tiny210/Linux
$ tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
执行命令将在当前路径出现新目录 opt/FriendlyARM/toolschain/4.5.1
执行sudo mkdir /usr/local/arm
sudo mv /home/archermind/opt/FriendlyARM/toolschain/4.5.1 /usr/local/arm/ -r
修改PATH路径:
$ vi ~/.profile
在文件最后加上一行
PATH=$PATH:/usr/local/arm/4.5.1/bin
vi /root/.profile
在文件最后加上一行
PATH=$PATH:/usr/local/arm/4.5.1/bin
(/home/archermind为当前环境的主目录,根据自己的主目录具体修改)
保存退出,然后重启电脑。
在终端执行 $ arm-linux-gcc–v
会显示交叉编译的版本信息,说明安装成功。
2、编译安装QT
在qt-everywhere-opensource-src-4.6.2.tar.gz所在目录执行命令:
$ tar xvzfqt-everywhere-opensource-src-4.6.2.tar.gz–C /home/archermind
$ cd /home/archermind
将会出现目录qt-everywhere-opensource-src-4.6.2
$ cdqt-everywhere-opensource-src-4.6.2
执行配置命令
$sudo ./configure -prefix /usr/local/Trolltech/qt4.6.2 -no-qvfb -embedded arm -depths 4,8,16,32 -qt-mouse-linuxtp -make libs -nomake tools -xplatform qws/linux-arm-g++ -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-glib -qt-freetype -little-endian-stl -v
$ sudo make
在make过程中一般会报出各种各样的错误,且每次编译可能问题都不一样,现将我所遇到的问题及解决方案理出如下:
1
遇到problem: undefine ....
办法:在对应的Makefile中LIBS后加上-lrt
2
遇到:png.h中有结构体未定义
办法:下载较新libpng包,解压到主目录中,进入该目录。
$./configure\
-–hos=arm-linux\–prefix=/home/archermind/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi–enable-shared–enable-static
$ make
$ make install
找到包中的pngconf.h png.h,复制到指定include目录中
->~/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include
3
遇到:jpeghandler.cpp文件编不过时
办法:到上级目录找到jpeg.pro里面,把jpeghandler.cpp去掉。
4
遇到:某个目录下文件怎么弄也编不过时,如果该目录内容对你不重要时。
办法:找到目录上一级配置文件中删除编译这个目录,还可以利用configure选项 例如-nomake tools,这样tools目录不会再编译了。
5
遇到:Error: register or shift expression expected -- `orr r3,r2,lsl#16'
办法:这是个BUG,QT里面应该先判断编译器版本的,结果人家找出来放到官网了,还好他们给出了解决方案:
http://bugreports.qt.nokia.com/browse/QTBUG-6521
To fix this issue patch /src/3rdparty/freetype/include/freetype/config/ftconfig.h Line 330.
"orr %0, %2, lsl #16/n/t" /* %0 |= %2 << 16 */
+ "orr %0, %0, %2, lsl #16/n/t" /* %0 |= %2 << 16 */
他的意思是加多一个%0在%2前面,加上后编译过。
6
遇到:提示未找到命令:arm-linux-gcc
办法:由于是sudo命令,需要root用户也添加环境变量export PATH=$PATH:/usr/local/arm/3.4.1/bin
7
遇到:出现以下错误:../3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h:298:6: #error "Not supported ARM architecture"
make[1]: *** [obj/release/pcre_compile.o] 错误1
make[1]:正在离开目录`/usr/local/qt/qt-everywhere-opensource-src-4.6.3-arm/src/script'
make: *** [sub-script-make_defaulrgefile
方法:add a line in your ./configure parameters, such as "-D__ARM_ARCH_5TEJ__" , or whichever architecture definition that suits the platform.
就是在./configure参数后面增加一个"-D__ARM_ARCH_5TEJ__"
make install
遇到 权限问题
办法 sudo make
sudo make install
Make完毕之后,执行:
$ sudo make install
结束后会在/usr/local/ Trolltech/qt4.6.2目录中生成QT文件。
$ sudo cp /usr/local/Trolltech/qt4.6.2/include/*~/Tiny210/Linux/opt/FriendlyARM/toolschain/
4.5.1/arm-none-linux-gnueabi/include/
$ sudo cp /usr/local/Trolltech/qt4.6.2/ib/*~/Tiny210/Linux/opt/FriendlyARM/toolschain/
4.5.1/arm-none-linux-gnueabi/lib/
(拷贝QT头文件和库文件,是为了编译opencv做准备)
3、编译安装openCV
终端进入cmake-2.8.8-Linux-i386.tar.gz所在目录,执行:
$ tar xvzfcmake-2.8.8-Linux-i386.tar.gz–C /home/archermind
执行后会出现 /home/archermind/cmake-2.8.11.2-Linux-i386目录
终端进入opencv-2.4.6.1.tar.gz所在目录,执行:
$tar xvzfopencv-2.4.6.1.tar.gz–C /home/archermind
执行后会出现/home/archermind/opencv-2.4.6.1目录
$ cd/home/archermind/opencv-2.4.6.1
$ mkdir–r build
$ /home/archermind/cmake-2.8.11.2-Linux-i386/bin/cmake-gui
执行后会出现cmake配置图形界面。
在窗口化界面中
选择源码目录/home/archermind/opencv-2.4.6.1
选择build目录/home/archermind/opencv-2.4.6.1/build
点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next
Operating System填写arm-linux
C compilers 填写~/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linuc-gcc
C++comilers填写~/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linuc-g++
ROOT Target 填写/usr/local/Trolltech/qt4.6.2
(如果不编QT一般添~/Tiny210/Linux/opt/FriendlyARM/toolschain/4.5.1)
点击Finish
默认安装路径为 /usr/local,点击Generate生成Makefile
在图形框主目录找到WITH_QT打钩,WITH_TIFF去掉钩 ,点Configure
然后再找到新增的QT_QMAKE_EXECUTABLE选项,确保后面的路径为/usr/local/Trolltech/qt4.6.2/bin/qmake
点configure,再点Generate生成MAkefile
修改~/ opencv-2.4.6.1/modules/highgui/CMakeLists.txt
找到set(highgui_srcs,然后下一行加上一行:
src/cap_v4l.cpp //加上这个视频文件
修改~ /opencv-2.4.6.1/cmake/templates/ cvconfig.h.cmake
24行加上:#define HAVE_CAMV4L2
234行加上:#define HAVE_QT
$ cd/home/archermind/opencv-2.4.6.1/build
$ sudo make
Make过程中可能会遇到如下问题:
1 遇到:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'
../../lib/libopencv_core.so: undefined reference to `pthread_key_create
解决方法:
修改build/CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除
2 遇到:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy'
../../lib/libopencv_highgui.so: undefined reference to `TIFFOpen'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFfree'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemset'
解决方法:修改build/CMakeCache.txt,WITH_TIFF:BOOL=ON,改成OFF,重新编译,错误消除
3 遇到:OpenCV-2.2.0/modules/ml/src/gbt.cpp:474: error: 'expl' was not declared in this scope
解决: 修改gbt.cpp中14行,16行:注释掉
//#if ANDROID
#define expl(x) exp(x)
//#endif
4 遇到:lib/libopencv_features2d.so: undefined reference to `cv::SIFT::SIFT(double, bool, bool, int, int, int, int
解决: 在OpenCV2.2.0/modules/features2d/src/sift.cpp下
#ifdef __arm__
#define ARM_NO_SIFT
#endif
注释掉#define ARM_NO_SIFT.错误消除,
5 遇到:/home/ubuntu-1/opencv-2.4.6.1/modules/highgui/src/window_QT.cpp: In member function 'void GuiReceiver::showImage(QString, void*)':
/home/ubuntu-1/opencv-2.4.6.1/modules/highgui/src/window_QT.cpp:953:25: error: 'class QString' has no member named 'toStdString'
解决: vi modules/highgui/src/window_QT.cpp
953 cv::imshow(name.toStdString(), im);替换为:
954 cv::imshow(qPrintable(name), im);
编译成功!
$ sudo makeinstall
安装成功!
sudo cp /usr/local/lib/*/usr/local/arm/4.5.1/arm-none-linux-gnueabi/lib/-r
哈哈,到这里即将大工告成了,下面我们就来编译一个程序试试,
程序中将会用到交叉编译器,qt库,openCV库等,如果编译运行成功
说明我们配置的环境没问题:
验证程序:
编写文件opencv_test.cpp 内容如下:
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main(int argc,char **argv)
{
CvCapture* capture = NULL;
IplImage* frame = NULL;
if(!(capture = cvCaptureFromCAM(-1))) //我这里写的参数是0代表dev/video0
{
fprintf(stderr, "Can not open camera./n");
return -1;
}
cvNamedWindow("video", 1);
while(frame = cvQueryFrame( capture ) )
{
cvShowImage("video", frame);
}
cvDestroyWindow("video");
cvReleaseCapture(&capture);
return 0;
}
在该文件所在目录,执行命令:
$arm-linux-g++ -o opencv_test opencv_test.cpp -I /usr/local/include -L /usr/local/lib
-lopencv_core -lopencv_highgui -lpthread –lrt
生成的程序opencv_test,用命令$readelf -h opencv_test 看看是不是arm执行的程序。
在开发板执行opencv-qt程序时,需要把QT所有lib库和opencv所有lib库,复制到开发板/lib/下。
QT+opencv环境搭建相关推荐
- 使用飞凌嵌入式IMX6UL-C1板子——qt+opencv环境搭建
使用飞凌嵌入式IMX6UL-C1板子--qt+opencv环境搭建 准备工作: Ubuntu18.04虚拟机环境 飞凌官方提供的qt-tslib库,gcc交叉编译器,opencv源码库,qt源码,具体 ...
- OpenCV图像处理--Qt+OpenCV环境搭建
LinuxQt+Opencv 环境搭建参照 LinuxQT+第三方库配置 WindowsQt+OpenCV环境搭建 一.下载opencv环境 opencv环境下载 2.Qt+OpenCV环境测试 新建 ...
- 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果
OpenCV是我们大家非常熟悉的图像处理开源类库:在其新版本将原本在Contrib分库中的DNN模块融合到了主库中,并且更新了相应文档.这样我们就能够非常方便地利用OpenCV实现一些属于DeepLe ...
- 基于 C++ 和 Python 的 OpenCV 环境搭建
目录 Ⅰ.VS 中基于 C++ 的 OpenCV 环境搭建(编译源码 cmake + opencv 4.2.0 + opencv_contrib 4.2.0) 1-1. 安装 cmake 1-2. 使 ...
- qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...
作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...
- OpenCV环境搭建(一)
OpenCV环境搭建 环境搭建为OpenCV的python(一下简称py)开发环境搭建,建立在py3的环境和语法上实现的. windows系统搭建 系统环境:windows 10 + python 3 ...
- 嵌入式Qt开发环境搭建
嵌入式Qt开发环境搭建 系统基础环境 系统更新 sudo apt update sudo apt upgrade sudo apt autoremove 安装常用软件 # 安装vim sudo apt ...
- iMX6 yocto平台QT交叉编译环境搭建
1.安装ubuntu上必备的库文件: 如果无法安装请依次执行以下两个命令: apt-get upgrade apt-get update 再安装以上的库文件. 2.搭建JDK开发环境 下载jdk1.6 ...
- i.MX平台Qt交叉编译环境搭建
主机环境:Ubuntu 12.04, 64位 . 交叉编译工具:Poky 1.5.3 交叉编译工具链及相关工具 1.安装交叉编译工具 将 poky 交叉编译工具压缩包解压到 /opt 目录. $ su ...
最新文章
- Oracle定时执行存储过程
- 科研文献|了解多个含水层中微生物砷的迁移:DNA 和 RNA 分析的见解
- hdoj Last non-zero Digit in N! 【数论】
- 模块-基本概念和import导入复习
- UESTC 288 青蛙的约会 扩展GCD
- msp430和stm32 dht11驱动程序
- [抽奖系统下载]多进程现场抽奖展示系统V2-双屏PPT版-专业抽奖展示工具-具有强劲引擎的抽奖系统-PPT双屏技术深度应用,国内唯一
- 三角网导线平差实例_三角网闭合导线平差计算表0
- c# word 增加段落_word排版技巧:如何防止行距随字号而改变?
- ubuntu 安装pyqt IDE使用eric 辛酸史
- vyos in or out 限流量
- CISP可以自己报名考试吗?
- Mac查看电池健康情况、电池损耗的方法
- C/C++编程:std::move(将左值强制转换为右值)
- 2021年美容师(初级)报名考试及美容师(初级)考试试卷
- Python基本数据类型大集合
- 记一次小米路由器任意文件读取漏洞
- cruisecontrol 配置
- 借CT阵营之力NFV让运营商网络变得更美
- DEJA_VU3D - Cesium功能集 之 083-Cesium热力图实现完整版