Qt & opencv 学习(一)
Qt也没怎么系统学过,opencv也没系统学过。慢慢来,一步一步弄清楚吧。
天嵌科技有个文档,先去看这个文档,主要是开发环境的配置。文档名字就是QT应用程序开发手册-20150918.pdf。在QT里面设置交叉编译器,设置qmake的路径。qmake是为了生成makefile文件,交叉编译器根据makefile编译程序并生成可执行文件。
用qt creater新建一个工程后,随便一个应用程序。编译这个程序的步骤是这样的。
1)打开终端。
2)cd /root/HelloEmbedSky 进入工程源码目录:/root/HelloEmbedSky.
3)执行 source /opt/EmbedSky/qt-4.5/setARM_env
4)执行$QMAKE
5)执行 make
6)同样生成 HelloEmbedSky,将该程序放到开发板上使用./HelloEmbedSky -qws 即可运行起来。
/opt/EmbedSky/qt-4.5/setARM_env里的内容又是怎样的呢。
内容如下:也就是这个里面设置了很多环境变量。$QMAKE要用这些环境变量。
#!/bin/sh
export QPEDIR=/opt/EmbedSky/qt-4.5/__install/arm/bin
export QTOPIA_DEPOT_PATH=/opt/EmbedSky/qt-4.5/__install/arm/bin
export QTDIR=/opt/EmbedSky/qt-4.5/__install/arm/bin
export DQTDIR=/opt/EmbedSky/qt-4.5/__install/arm/bin
export QMAKE=/opt/EmbedSky/qt-4.5/__install/arm/bin/qmake
export UIC=/opt/EmbedSky/qt-4.5/__install/arm/bin/uic
export TMAKEDIR=/opt/EmbedSky/qt-4.5/__install/arm/bin
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
export PATH=$QPEDIR/bin:$QTDIR/bin:$DQTDIR/bin:$TMAKEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$QTDIR/lib:$DQTDIR/lib:$LD_LIBRARY_PATH
按照上面的步骤就能成功编译出嵌入式QT的应用程序。前提是你安装好了Qt Creater,并安装好了交叉编译器。
好了,嵌入式Qt能够用了,怎么在Qt里面使用opencv里的内容呢。主要有两点,一、头文件包含 二、链接库动态加载
编译好opencv后会得到include文件夹,这个文件下面有两个文件夹opencv和opencv2。将include文件夹整体复制到当前工程目录下来。
第二个就是动态链接库了,libopencv_core.so libopencv_highgui.so libopencv_imgproc.so 这三个文件是opencv编译后得到的。这里将这3个文件放在/opt/EmbedSky/4.4.6/lib目录下。
既然要增加对opencv库函数的使用,肯定要在工程的makefile文件中,添加上面的头文件路径和动态链接库加载。先看下上面工程生成的makefile文件,上面操作后的第(4)部$QMAKE后,就得到了makefile。下面是makefile里的内容,文件比较长,摘取重要的部分。
CC = arm-linux-gcc
CXX = arm-linux-g++
DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES)
INCPATH = -I/opt/EmbedSky/qt-4.5/__install/arm/mkspecs/default -I. -I/opt/EmbedSky/qt-4.5/__install/arm/include/QtCore -I/opt/EmbedSky/qt- 4.5/__install/arm/include/QtNetwork -I/opt/EmbedSky/qt-4.5/__install/arm/include/QtGui -I/opt/EmbedSky/qt-4.5/__install/arm/include -I. -Isrc -Iinclude -Iinclude/opencv -Iinclude/opencv2 -I. -I.
LINK = arm-linux-g++
LFLAGS = -Wl,-O1 -Wl,-rpath,/opt/EmbedSky/qt-4.5/__install/arm/lib.
LIBS = $(SUBLIBS) -L/opt/EmbedSky/qt-4.5/__install/arm//lib -L. -lopencv_core -lopencv_highgui -lopencv_imgproc -lQtGui -L/tslib-1.4/libc -L/opt/EmbedSky/qt-4.5/__install/arm//lib -lts -lQtNetwork -lQtCore -lm -lrt -ldl -lpthread
AR = arm-linux-ar cqs
RANLIB =
QMAKE = /opt/EmbedSky/qt-4.5/__install/arm/bin/qmake
上面的makefile摘取的内容已经被我更改了,注意黑色加粗和红色标注的部分。INCPATH就是编译时的包含路径,LIBS就是动态链接哪些库。
上面的INCPATH增加了3个头文件查找位置,后面的LIBS增加了3个库文件。这里的库是相对链接,画张示意图。