Qt使用OpenCv
环境配置学习视频来源: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相关推荐
- 在Qt调用OpenCV库编写GUI程序
写在前面 OpenCV本身自带的HighGUI库就可以完成一部分GUI设计编写工作,无奈其中控件实在太少,除了按钮就是滚动条,OpenCV中文站上曾经给出了OpenCV和MFC的搭配调用,但是Open ...
- Qt与OpenCV编程:在QLabel加载的图像上画矩形并剪切
前言 1.使用Qt与OpenCV做开发时,时常会用到鼠标与图像交互这块,OpenCV有自己的鼠标事件,但要在Qt搭建的界面上是不能使用OpenCV封装的鼠标事件,Qt有自己的鼠标事件. 2.Qt鼠标事 ...
- Qt:OpenCV—Q图像处理基本操作(Code)
原文链接:http://www.cnblogs.com/emouse/archive/2013/03/31/2991333.html 作者写作一系列:http://www.cnblogs.com/em ...
- QT与openCV,与PCL结合!
(1):详解QT多媒体框架:给予视频播放器 原文链接:http://mobile.51cto.com/symbian-271123.htm 对于使用主框架的QT程序,实现Qimage的转换可借鉴下面程 ...
- qt调用opencv汇总(2)
OpenCV3.4.3+Qt5.9.4(QtCreator)开发环境搭建 之前有过对OpenCV3.4.2+VS2015编译及环境搭建,今天使用OpenCV3.4.3+QtCreator5.9.4编译 ...
- Qt调用OpenCV汇总(1)
//************************************************************************************************** ...
- linux上qt配置opengl,Ubuntu下配置Qt+OpenGL+OpenCV
我的平台:Ubuntu 10.04+Qt+OpenGL+OpenCV OpenGL是Qt自带的,Windows下的版本OpenGL库已经随同Qt的Windows发行版一同安装,Linux版本则没有安装 ...
- windows平台下基于QT和OpenCV搭建图像处理平台
在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...
- Qt + Python + OpenCV图标替换工具 之 Qt界面设计(四)
目录 上一篇博文 程序的下载地址以及源码 Qt界面设计 上一篇博文 Qt + Python + OpenCV图标替换工具 之 Python调用dll(三) https://blog.csdn.net/ ...
- Qt + Python + OpenCV图标替换工具 之 Python调用dll(三)
目录 上一篇博文 程序的下载地址以及源码 Python调用dll 上一篇博文 Qt + Python + OpenCV图标替换工具 之 获取颜色及生成图片(二) https://blog.csdn.n ...
最新文章
- AOP、注解实现日志收集
- 实训09.11:java重点内容介绍
- python 定时执行_python定时执行任务 轻量级
- Make WAR file 1.0
- 进阶之路:深入解读 Java 堆外内存 | 凌云时刻
- oracle10.2.0.4 dbca,10.2.0.4 DBCA problem :Error securing Database Control,...
- UNI-APP_微信授权失败 微信授权第一次失败,需要授权两次才能成功
- scrapy下载图片(《精通scrapy网络爬虫》第九章)
- win10 使用IBM-kui链接kubectl
- Attach机制实现完全解读
- 8bit音乐的一些相关知识
- vb/java/c# 生成code128 条码/QR Code二维码 导出excel
- 三步完成两张网卡共享上网,区别于移动热点共享上网
- 鸿蒙文化博物馆,有趣、有味、有文化!“周末儿童博物馆”在成博欢乐启幕
- hibernate查找数据库中所有内容cannot be cast to com.shzy.model.Materia
- ARM面试总结(1)
- WordPress采集插件-自动采集插件
- MTK隐藏导航栏,去掉下拉,永不锁屏,永不灭屏
- TCPMP编译方法(转载)
- 合泰HT32F52352串口通信学习笔记
热门文章
- 北京交通大学万怀宇:时空交通数据预测方法及应用
- jvm参数调优_3_问题排查
- Tableau数据分析笔记-Chapter06填充地图、多维地图、混合地图
- 关于牛顿-欧拉法的外推和内推的理解
- 客户端单周发版下的多分支自动化管理与实践
- 下列各排序法中,最坏情况下的时间复杂度最低的是(**C** )A.希尔排序 B.快速排序 C.堆排序 D.冒泡排序
- 读取二代身份证号,做个记录
- java excel 分页合并_Excel办公技巧——完整显示跨页合并的单元格
- OFDM 符号的概念
- 由注意力机制中scaled sqrt(dk)操作联想到期望与方差的本质推导