环境配置学习视频来源:https://haokan.baidu.com/author/1706884117046568
代码编写复制来源:QT+OpenCV从零打造美颜软件 | 图像处理入门教程_哔哩哔哩_bilibili
电脑环境:Windows11家庭中文版+Qt5.12.12 +VS2015+可以正常开发Qt Widgets Application项目
OpenCv下载地址:Releases - OpenCV
下载完成是这样的:
双击进行安装:选好路径,点Extract开始安装
安装完的样子:
添加环境变量:
在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);
}