一、准备工作
- VS2012安装包下载 :VS2012下载地址,提取码:z36p
- VS2015安装包下载 :VS2015下载地址,提取码:sjkq (可选择)
- QT安装包下载:qt-opensource-windows-x86-msvc2012-5.5.1.exe) ,提取码:y3eu
- QT联合VS2012插件:qt-vs-addin-1.2.2-opensource.exe ,提取码:sa19
- QT联合VS2015插件:qt-vsaddin-msvc2015-2.2.2.vsix ,提取码:8juk
- OpenCV库的的安装:opencv-3.0.0下载地址,提取码:70wz
PS:其他Qt版本安装:http://download.qt.io/official_releases/online_installers/,选择qt-unified-windows-x86-online.exe 03-Nov-2020 13:34 22M Details
。
安装教程参考:Qt5.15下载和安装教程 。注:安装路径不要出现中文、空格等。
VS安装时,我是自定义安装的,可以参考我勾选的这几项,一般够了:
二、开始配置
VS联合OpenCV配置教程:
Visual Studio 2012的安装,并配置OpenCV,请参考:
地址一: https://blog.csdn.net/tina_ttl/article/details/51484622,
地址二: https://blog.csdn.net/on2way/article/details/48273523
注:OpenCV里面的VC10,VC11,VC12分别对应的是VS2010,2012,2013,根据自己的VS版本配置相对应的路径。如果嫌弃网盘下载慢的也可以去这里面去下载VS和OpenCV库,都一样
VS联合QT5配置教程:
1 . 环境变量的配置
我的电脑-》右键属性-》高级-》环境变量 ,在PATH中加上 :D:\QT5\5.5\msvc2012\bin(找到自己bin对应的安装路径)
2 . 然后在VS2012中也要设置环境变量,QT5-》Qt Options-》Add,版本名称是QT5.5.1,路径:D:\QT5\5.5\msvc2012
注:只有安装了QT联合VS2012插件,才会在VS标题栏中出现QT5。
三、联合使用
示例:VS2012使用OpenCV库,并联合QT5实现在QT界面显示图片
1 . 新建QT5.1工程:VS2012新建一个工程,选择QT5 Projects-》QT application,工程名为Qt5test。
一键Ok,直接Finish,工程就建立成功了。
2 . 在QT界面添加按钮,并添加接受部件发出信号的槽,也就是按钮的响应函数。
双击qt5test.ui,会弹出来Qt 设计师界面,拖两个按钮(PushBotton)、两个labal(显示图片)控件添加到界面中,然后双击修改按钮的名称,以及改变按钮的尺寸。
然后链接信息/槽,选中 编辑信息/槽 按钮(如下图),左键Open Image按钮,拖拽,就可以拖出一条链接信号/槽的线,松开鼠标,就弹出编辑出口(如下图)。点击编辑按钮,在槽中添加按钮按下的响应函数,OpenImageClicked()以及ProcessClicked()函数,确定后,点击click,选择OpenImageClicked()作为按钮Open Image的响应函数,同样设置Process的响应函数为ProcessClicked();设计好的界面记得保存,VS2012运行是不会对Qt Project自动保存,只会加载之前保存的界面
3. 编写槽函数
在QT5test类中声明和定义两个按钮响应函数OpenImageClicked()和ProcessClicked()
双击qt5test.h,在类中添加两个响应函数的声明,添加头文件
#include <opencv/cv.h> #include <opencv/highgui.h> private slots: //声明信号函数 void OpenImageClicked(); void ProcessClicked();
4 . 双击qt5test.cpp,编辑槽函数
void Qt5test::OpenImageClicked() { image = cv::imread(”img.jpg”);//读取图像 cv::cvtColor(image, image, CV_RGB2RGBA);//图像在QT显示前,必须转化成QImage格式,将RGBA格式转化成RGB QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB32); QLabel *label = new QLabel(this); label->move(130,50); label->setPixmap(QPixmap::fromImage(img)); label->resize(label->pixmap()->size()); label->show(); } void Qt5test::ProcessClicked() { cv::flip(image,result,1);//对图像进行翻转 QImage img = QImage((const unsigned char*)(result.data), result.cols, result.rows, QImage::Format_RGB32); QLabel *label = new QLabel(this); label->move(380,50); label->setPixmap(QPixmap::fromImage(img)); label->resize(label->pixmap()->size()); label->show(); }
5.运行程序结果如下: