环境配置学习视频来源: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 += targetwin32: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 <QMainWindow>
#include <QFileDialog>
#include <QImage>
#include <QPixmap>#include <opencv2/opencv.hpp>
using namespace cv;
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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 <QDebug>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<int>(src.step),QImage::Format_RGB888);return  image.rgbSwapped();}else{QImage image;return  image;}}void MainWindow::whiteFace(Mat &m)
{for (int i = 0;i<m.rows ;i++ ) {for (int j =0;j<m.cols ;j++ ) {for (int k=0;k<3 ;k++ ) {m.at<Vec3b>(i,j)[k]=saturate_cast<uchar>(m_Contrast*m_Mat.at<Vec3b>(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<hsvMat.cols ;i++ ) {qDebug()<< hsvMat.at<Vec3b>(500,i)[0]<<hsvMat.at<Vec3b>(500,i)[1]<<hsvMat.at<Vec3b>(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相关推荐

  1. 在Qt调用OpenCV库编写GUI程序

    写在前面 OpenCV本身自带的HighGUI库就可以完成一部分GUI设计编写工作,无奈其中控件实在太少,除了按钮就是滚动条,OpenCV中文站上曾经给出了OpenCV和MFC的搭配调用,但是Open ...

  2. Qt与OpenCV编程:在QLabel加载的图像上画矩形并剪切

    前言 1.使用Qt与OpenCV做开发时,时常会用到鼠标与图像交互这块,OpenCV有自己的鼠标事件,但要在Qt搭建的界面上是不能使用OpenCV封装的鼠标事件,Qt有自己的鼠标事件. 2.Qt鼠标事 ...

  3. Qt:OpenCV—Q图像处理基本操作(Code)

    原文链接:http://www.cnblogs.com/emouse/archive/2013/03/31/2991333.html 作者写作一系列:http://www.cnblogs.com/em ...

  4. QT与openCV,与PCL结合!

    (1):详解QT多媒体框架:给予视频播放器 原文链接:http://mobile.51cto.com/symbian-271123.htm 对于使用主框架的QT程序,实现Qimage的转换可借鉴下面程 ...

  5. qt调用opencv汇总(2)

    OpenCV3.4.3+Qt5.9.4(QtCreator)开发环境搭建 之前有过对OpenCV3.4.2+VS2015编译及环境搭建,今天使用OpenCV3.4.3+QtCreator5.9.4编译 ...

  6. Qt调用OpenCV汇总(1)

    //************************************************************************************************** ...

  7. linux上qt配置opengl,Ubuntu下配置Qt+OpenGL+OpenCV

    我的平台:Ubuntu 10.04+Qt+OpenGL+OpenCV OpenGL是Qt自带的,Windows下的版本OpenGL库已经随同Qt的Windows发行版一同安装,Linux版本则没有安装 ...

  8. windows平台下基于QT和OpenCV搭建图像处理平台

        在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...

  9. Qt + Python + OpenCV图标替换工具 之 Qt界面设计(四)

    目录 上一篇博文 程序的下载地址以及源码 Qt界面设计 上一篇博文 Qt + Python + OpenCV图标替换工具 之 Python调用dll(三) https://blog.csdn.net/ ...

  10. Qt + Python + OpenCV图标替换工具 之 Python调用dll(三)

    目录 上一篇博文 程序的下载地址以及源码 Python调用dll 上一篇博文 Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二) https://blog.csdn.n ...

最新文章

  1. AOP、注解实现日志收集
  2. 实训09.11:java重点内容介绍
  3. python 定时执行_python定时执行任务 轻量级
  4. Make WAR file 1.0
  5. 进阶之路:深入解读 Java 堆外内存 | 凌云时刻
  6. oracle10.2.0.4 dbca,10.2.0.4 DBCA problem :Error securing Database Control,...
  7. UNI-APP_微信授权失败 微信授权第一次失败,需要授权两次才能成功
  8. scrapy下载图片(《精通scrapy网络爬虫》第九章)
  9. win10 使用IBM-kui链接kubectl
  10. Attach机制实现完全解读
  11. 8bit音乐的一些相关知识
  12. vb/java/c# 生成code128 条码/QR Code二维码 导出excel
  13. 三步完成两张网卡共享上网,区别于移动热点共享上网
  14. 鸿蒙文化博物馆,有趣、有味、有文化!“周末儿童博物馆”在成博欢乐启幕
  15. hibernate查找数据库中所有内容cannot be cast to com.shzy.model.Materia
  16. ARM面试总结(1)
  17. WordPress采集插件-自动采集插件
  18. MTK隐藏导航栏,去掉下拉,永不锁屏,永不灭屏
  19. TCPMP编译方法(转载)
  20. 合泰HT32F52352串口通信学习笔记

热门文章

  1. 北京交通大学万怀宇:时空交通数据预测方法及应用
  2. jvm参数调优_3_问题排查
  3. Tableau数据分析笔记-Chapter06填充地图、多维地图、混合地图
  4. 关于牛顿-欧拉法的外推和内推的理解
  5. 客户端单周发版下的多分支自动化管理与实践
  6. 下列各排序法中,最坏情况下的时间复杂度最低的是(**C** )A.希尔排序 B.快速排序 C.堆排序 D.冒泡排序
  7. 读取二代身份证号,做个记录
  8. java excel 分页合并_Excel办公技巧——完整显示跨页合并的单元格
  9. OFDM 符号的概念
  10. 由注意力机制中scaled sqrt(dk)操作联想到期望与方差的本质推导