Qt使用OpenCv

这篇具有很好参考价值的文章主要介绍了Qt使用OpenCv。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

OpenCv下载地址:Releases - OpenCV

下载完成是这样的:

 Qt使用OpenCv

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

Qt使用OpenCv

 安装完的样子:

Qt使用OpenCv

 添加环境变量:

Qt使用OpenCv

 在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的代码,供后续参考复习文章来源地址https://www.toymoban.com/news/detail-457578.html

#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_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 <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的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记录Qt和opencv 新环境配置过程

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:这里可以添加本文要记录的大概内容: 为外出干项目做一些环境准备工作,需要重新配置电脑环境,那首先装的肯定就是Qt了,以前安装都没做记录,这次就记录一下吧,希望对大家有用。 提示

    2024年01月21日
    浏览(40)
  • Linux下Qt配置opencv环境(ippicv,ffmpeg手动配置)

    1.opencv配置使用问题         opencv在cmake的时候有两个问题,ippicv长时间卡住下载失败,ffmpeg不会卡住但是也不会配置成功。所以这两个包只能手动下载安装。         ippicv是什么         OpenCV设计用于高效的计算,十分强调实时应用的开发。它由C++语言编写并进行了深

    2024年02月11日
    浏览(42)
  • Qt-OpenCV学习笔记--保存视频--VideoWriter()

    目录 一、概述 二、函数 三、测试代码 四、测试结果 五、遇到的问题 (1)初次运行代码会报错 (2)关于cv::VideoWriter::fourcc(\\\'X\\\',\\\'2\\\',\\\'6\\\',\\\'4\\\') 六、参考 这个函数是将连续的视频帧编码并保存到磁盘。函数的用法比较简单,但有一些问题点需要注意。 filename 视频的保存路径和文件

    2024年02月13日
    浏览(39)
  • Ubuntu 配置OpenCV 环境并在Qt下运行

    之前发过一篇Ubuntu20.04配置OpenCV3.4.14的文章,由于理解有限,其实配置方法不是很好,比如直接将OpenCV直接编译到了/usr/local/路径下,这样做会导致文件夹混乱,最好的方法是自建新一个文件夹并以编译的OpenCV+版本号命名,这样可以方便控制管理。后来和其他同学也讨论了一

    2024年02月16日
    浏览(37)
  • 1. linux系统下在QT中配置OPenCV开发环境

    1. 说明: 在Linux系统下配置OpenCV的开发环境,需要在官网上下载源码,并使用CMake工具对源码进行编译,与在Windows系统中配置相比复杂许多,本文linux系统为linux minit,opencv是最新版本4.7.0,不过对于linux和opencv的版本要求好像不高。 效果展示: 2. 配置步骤: 2.1 第一步:下载

    2024年02月16日
    浏览(40)
  • 2. windows系统下在QT中配置OPenCV开发环境

    1. 说明: 在Windows系统中配置相对简单,不需要对下载的源码进行编译,在官网上下载的OPenCV可以直接使用,本文系统版本为win10,opencv是最新版本4.7.0。 效果展示: 2. 配置步骤: 2.1 下载OPenCV压缩包 打开opencv的官网OPenCV下载地址,可以在其页面内下载到最新的压缩包,如下

    2024年02月09日
    浏览(51)
  • 在IIS服务器上安装SSL证书(2023配置启用HTTPS部署教程)内容来源SSL市场网

    https://www.sslmarket.com.cn/146.html

    2024年02月10日
    浏览(62)
  • opencv系列(1)--使用opencv和Qt6做一个视频监控器人脸识别

    这个程序是自己的下班之后,看看那个坏东西想来偷看我的电脑。我就随手做的一个程序。 1.能都显示摄像头的内容。 2.如果有人进入摄像头。 3.利用opencv的模型识别人脸,识别到了就保存到自己的电脑里面。 4.并把他的照片显示到界面上一段时间,告诉他,偷窥有罪。 5.程

    2024年02月11日
    浏览(33)
  • VS+QT+Opencv使用YOLOv4对视频流进行目标检测

    对单张图像的检测,请参考:https://blog.csdn.net/qq_45445740/article/details/109659938

    2024年02月12日
    浏览(51)
  • 6. QT环境下使用OPenCV(利用鼠标实现图像的ROI区域选择)

    1. 说明 一张图像显示的内容可能并非所有的都是有用信息,有时需要选定某些区域做出特殊的处理。在OPenCV当中可以在图像上响应鼠标的操作,选取出图像上的特殊区域 — ROI区域。 效果展示: 2. 实现步骤 首先在QtCreator中创建一个新的widget项目,并配置好OPenCV的开发环境,

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包