【QT】搭载OpenCV实现简单的图像处理

一、环境介绍

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了个图,好吧这只是个开始……

猜你喜欢

转载自blog.csdn.net/qq_33033059/article/details/108320875