Qt使用OpenCv

环境配置学习视频来源:https://haokan.baidu.com/author/1706884117046568

代码编写复制来源:QT+OpenCV从零打造美颜软件 | 图像处理入门教程_哔哩哔哩_bilibili

电脑环境:Windows11家庭中文版+Qt5.12.12 +VS2015+可以正常开发Qt Widgets Application项目

OpenCv下载地址:Releases - OpenCV

下载完成是这样的:

 

双击进行安装:选好路径,点Extract开始安装

Qt使用OpenCv_第1张图片

 安装完的样子:

Qt使用OpenCv_第2张图片

 添加环境变量:

 在Qt能正常使用的情况下,在pro文件中添加外部库,库文件选:

C:\opencv\build\x64\vc15\lib\opencv_world460d.lib

添加完应该是这样的:

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

win32:CONFIG(release, debug|release): LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world460
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world460d
else:unix: LIBS += -LC:/opencv/build/x64/vc15/lib/ -lopencv_world460

在pro文件中手动写点内容:

INCLUDEPATH += C:/opencv/build/include
DEPENDPATH += C:/opencv/build/include

 到此环境配置结束;

以下是测试demo的代码,供后续参考复习

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 

#include 
using namespace cv;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QImage MatToImage(Mat&src);
    void whiteFace(Mat&m);
private slots:
    void on_pushButton_clicked();
    void on_contrastSlider_valueChanged(int value);
    void on_brightSlider_valueChanged(int value);
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
private:
    Ui::MainWindow *ui;
    QString m_FileName;
    Mat  m_Mat;
    float m_Contrast;
    int  m_Brightness;

};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_Contrast = 1;
    m_Brightness = 0;
}

MainWindow::~MainWindow()
{
    delete ui;
}

QImage MainWindow::MatToImage(Mat &src)
{
    if(src.type() == CV_8UC3){
        QImage image((uchar*)src.data,src.cols,src.rows,static_cast(src.step),QImage::Format_RGB888);
        return  image.rgbSwapped();
    }
    else{
        QImage image;
        return  image;
    }

}

void MainWindow::whiteFace(Mat &m)
{
    for (int i = 0;i(i,j)[k]=saturate_cast(m_Contrast*m_Mat.at(i,j)[k]+m_Brightness);
            }
        }
    }
}

void MainWindow::on_pushButton_clicked()
{
    m_FileName = QFileDialog::getOpenFileName(this,"选择图片","","");
    if(m_FileName.isEmpty()){return;}
    m_Mat = imread(m_FileName.toStdString());
    QImage img = MatToImage(m_Mat);
    img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
                     ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    QPixmap tempPixmap= QPixmap::fromImage(img);
    ui->label->setPixmap(tempPixmap);
}


void MainWindow::on_contrastSlider_valueChanged(int value)
{
    m_Contrast = 1 + (float)value/10;

    Mat result(m_Mat.rows,m_Mat.cols,m_Mat.type());
    whiteFace(result);
    QImage img = MatToImage(result);
    img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
                     ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    QPixmap tempPixmap= QPixmap::fromImage(img);
    ui->label_4->setPixmap(tempPixmap);
}


void MainWindow::on_brightSlider_valueChanged(int value)
{
    m_Brightness = value;

    Mat result(m_Mat.rows,m_Mat.cols,m_Mat.type());
    whiteFace(result);
    QImage img = MatToImage(result);
    img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
                     ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    QPixmap tempPixmap= QPixmap::fromImage(img);
    ui->label_4->setPixmap(tempPixmap);
}


void MainWindow::on_pushButton_2_clicked()
{
    int val = 40;
    Mat bfMat;
    Mat result(m_Mat.rows,m_Mat.cols,m_Mat.type());
    bilateralFilter(m_Mat,bfMat,val,val*2,val/2);

    GaussianBlur(bfMat,result,Size(3,3),1,1);
    addWeighted(bfMat,1.5,result,-0.5,0,result);

    QImage img = MatToImage(result);
    img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
                     ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    QPixmap tempPixmap= QPixmap::fromImage(img);
    ui->label_4->setPixmap(tempPixmap);
}


void MainWindow::on_pushButton_3_clicked()
{
    Mat hsvMat,destFrame,result;
    cvtColor(m_Mat,hsvMat,COLOR_BGR2HSV);

    for (int i= 0;i(500,i)[0]<(500,i)[1]<(500,i)[2];
    }

    inRange(hsvMat,Scalar(10,10,50),Scalar(60,120,190),destFrame);

    cvtColor(destFrame,destFrame,COLOR_GRAY2BGR);
    bitwise_and(m_Mat,destFrame,result);

    QImage img = MatToImage(result);
    img = img.scaled(ui->label->geometry().width(),ui->label->geometry().height()
                     ,Qt::KeepAspectRatio,Qt::SmoothTransformation);
    QPixmap tempPixmap= QPixmap::fromImage(img);
    ui->label_4->setPixmap(tempPixmap);
}

你可能感兴趣的:(图像处理,qt,opencv,VS2015,Qt5.12.12)