opencv 自学日记2-在qt项目中使用opencv的链接库

1. 准备
1)OpenCv库文件,头文件; 
如果QT用的编译器是MinGW,那么则无法编译.lib后缀的库文件,所以需要准备.a后缀的opencv库文件。opencv244版本带有mingw的库文件,但opencv2410以后则没有了。 
如果需要用opencv2410以后的版本,可以Cmake进行手动生成mingw所需要的库文件。教程链接: CMake编译opencv教程  
2)Qt运行环境
2. 在项目中添加库文件
1)右击项目,选择添加库; 

2)选择外部库;
3)选择库文件路径: 

4)选择头文件路径: 

5)修改选项,去掉“为Debug版本添加-d后缀选项”,因为MinGw编译环境需要的库文件没找到-d后缀的库文件。VC编译的则有-d后缀的库文件。如果不去掉这个选项,在MinGw下Debug编译就会有问题。 

6)完成前面步骤则成功添加了一个库文件,继续添加库文件可以重复上面的步骤,也可以直接复制-修改-粘贴;后面两个库文件为复制第一个,然后改动库文件名得到($$PWD代表项目所在根目录)。到此添加库文件完成。 

3包含头文件,使用opencv函数
1)包含头文件
#include "opencv2/opencv.hpp" using namespace cv ; //只需包含该头文件及命名空间,则所有opencv的头文件都被包含
  • 1
  • 2
2)读取图像,这里开了一个线程不断的读取图像;
void imageshow::run(){ IplImage *img; char buf[ 64 ] = { 0 }; int i = 0 ; while (!isStop) { //读取图像; sprintf (buf, "image/%d.jpg" ,i); img = cvLoadImage(buf); if (!img) { //读取失败则跳出循环; break ; } i++; //判断图像的像素坐标原点是左上角或左下角,因为QT图像像素原点为左上角,所以opencv图像原点如果是左下角,则需要转换; if (img->origin == IPL_ORIGIN_TL) { } else { cvFlip(img,img, 0 ); } //把opencv的BGR转换成QT的RGB; cvCvtColor(img, img, CV_BGR2RGB); emit drawImg(img); }}

3)显示图像
void Widget ::drawImg (IplImage * img){ QImage qtempimg((uchar * )(img -> imageData), img -> width, img -> height ,QImage ::Format_RGB888 ); //设置label所显示的内容自动适配label的大小; ui -> label -> setScaledContents( true ); ui -> label -> setPixmap(QPixmap ::fromImage (qtempimg)); //释放image cvReleaseImage( & img);}

注意问题
1)编译出错 
检查库文件路径是否正确,除了上面说到的添加库的方法,还有其它的方法,例如:
# 头文件路径INCLUDEPATH+= F: \opencv 2_4_10 \include\opencv\ F: \opencv 2_4_10 \include\opencv 2 \ F: \opencv 2_4_10 \include # 库文件路径LIBS+= F: \opencv 2_4_10 \lib\libopencv _core2410.dll.a \ F: \opencv 2_4_10 \lib\libopencv _highgui2410.dll.a \ F: \opencv 2_4_10 \lib\libopencv _imgproc2410.dll.a

建议使用第一种方法,这样就不用去记,只需要按照向导完成添加就好。 
使用MinGw编译记得在添加的时候把“为debug版本添加-d后缀”选项去掉。
检查头文件路径是否正确,opencv的include文件夹又分为了opencv和opencv2两个子文件夹。
2)图像读取失败
检查读取的路径是否正确,注意在QCreate启动的程序的读取路径和点击.exe启动的读取路径是不同的。
3)把.dll添加到debug或release路径下;

猜你喜欢

转载自blog.csdn.net/bootleader/article/details/80875602