一、环境介绍
PC:Windows7
IDE:Qt5.8+Qt Creator 4.9
OpenCV版本:OpenCV3.4.10
官网上下载很慢,去这个网址,https://zh.osdn.net/projects/sfnet_opencvlibrary/releases/
这里是opencv官方文档地址,介绍了opencv的所有功能和demo程序https://www.w3cschool.cn/opencv/
编译器:msvc2017
这个和MinGW使用方式不一样,MinGW主要用于跨平台,需配合CMake使用;我电脑已经装过了vs ,所以直接在PC端使用msvc
二、配置环境
1.qt的路径加到系统环境变量中去,这个用过qt的肯定都加过了
2.opencv依赖库添加到.pro文件中
INCLUDEPATH += E:\Opencv3\opencv\build\include
E:\Opencv3\opencv\build\include\opencv
E:\Opencv3\opencv\build\include\opencv2
LIBS += E:\Opencv3\opencv\build\x64\vc15\lib\*.lib
E:\Opencv3\opencv\build\x64\vc15\bin\*.dll
三、测试
1.测试代码,用opencv打开图片
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowTitle("OpenCV3 Test");
Mat src = imread("E:/Work/test.jpg");
Mat img;
cvtColor(src, img, COLOR_BGR2RGB);//颜色空间转换
QPixmap pixmap = QPixmap::fromImage(QImage(img.data, img.cols, img.rows, QImage::Format_RGB888));
int with = ui->img_label->width();//设置宽度
int height = ui->img_label->height();//设置高度
QPixmap fitpixmap = pixmap.scaled(with, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); // 饱满填充
ui->img_label->setAlignment(Qt::AlignCenter);//居中
ui->img_label->setPixmap(fitpixmap);//画图
}
MainWindow::~MainWindow()
{
delete ui;
}
2.(1)运行,告诉我程序异常退出
(2)那么去.exe文件路径中,双击打开exe看看具体什么问题,提示丢失opencv_world3410d.dll
(3)去opencv中找到这个文件,拷贝到该路径即可
第一张是直接用qt的pixmap画出来的,第二张张是经过通过颜色空间转换为RGB模式的,与原图一样,所以不要忘了转换一下颜色空间
四、灰度图
1.理论上改一下颜色空间就好了cvtColor(src, img_gray, COLOR_BGR2GRAY);
,但是程序竟然死掉了,这里忘记改了Mat img = src;
,不需要赋值,是我的问题。不能强制转换颜色空间,所以死掉了。我pei。
2.改掉就正常了
Mat img_gray;
cvtColor(src, img_gray, COLOR_BGR2GRAY);//颜色空间转换
QPixmap pixmap_gray = QPixmap::fromImage(QImage(img_gray.data, img_gray.cols, img_gray.rows, QImage::Format_Grayscale8));
int with_gray = ui->img_gray_label->width();//设置宽度
int height_gray = ui->img_gray_label->height();//设置高度
QPixmap fitpixmap_gray = pixmap_gray.scaled(with_gray, height_gray, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); // 饱满填充
ui->img_gray_label->setPixmap(fitpixmap_gray);
ui->img_gray_label->setAlignment(Qt::AlignCenter);
五、HSV图像
1.HSV颜色空间即色调、饱和度、明度的缩写,opencv依然提供了该颜色空间:cvtColor(src, img_gray, COLOR_BGR2HSV);
2.but……这是啥?看起来有点抽象,感觉像灰度与HSV的合体
3.这是因为Pixmap画图也要改成相应的颜色空间,用了HSV的颜色空间,但是用灰度图画出来了,so……,用rgb画出来吧,也不知道该用哪个
4.测试完搞得我一阵空虚,哼哧半天搁这P了个图,好吧这只是个开始……