opencv学习_qt显示图片(代码片段)

LeslieX徐 LeslieX徐     2023-01-08     314

关键词:

opencv+qt

1.opencv显示图片

hpp

三个主要函数

  • imgInit():负责加载图片,转换格式等操作
  • imgProc():负责对图片的处理和算法实现
  • imgShow():负责在窗口显示图片

#include "opencv2/opencv.hpp"
using namespace cv;

class MainWindow : public QMainWindow

    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void imgInit();
    void imgProc(float contrast,int brightness);
    void imgShow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    Mat myImg;
    QImage myQImg;
;

cpp

void MainWindow::imgInit()

    Mat ImgData = imread("test.jpg");
    cvtColor(ImgData,myImg,COLOR_BGR2RGB);
    myQImg = QImage((const unsigned char*)(myImg.data),myImg.cols,myImg.rows,QImage::Format_RGB888);
    imgShow();


void MainWindow::imgProc(float con, int bri)

    Mat src = myImg;
    Mat dst = Mat::zeros(src.size(),src.type());
    src.convertTo(dst,-1,con,bri);
    myQImg = QImage((const unsigned char*)(dst.data),dst.cols,dst.rows,QImage::Format_RGB888);
    imgShow();



void MainWindow::imgShow()

    ui->label->setPixmap(QPixmap::fromImage(myQImg.scaled(ui->label->size())));//显示到Qlabel上



void MainWindow::on_pushButton_clicked()

    imgInit();

注意:

Mat默认的是BGR空间,而QImage是RGB,所以使用cvtColor函数预处理一下。

第二个函数QImage(uchar *data, int width, int height, QImage::Format format)

2.添加滑条处理图片

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)

    ui->setupUi(this);
    imgInit();
    imgShow();
    ui->verticalSlider->setSliderPosition(50);
    ui->verticalSlider_2->setSliderPosition(50);


void MainWindow::on_verticalSlider_sliderMoved(int position)

    imgProc(position/33.3, 0);



void MainWindow::on_verticalSlider_valueChanged(int value)

    imgProc(value/33.3, 0);



void MainWindow::on_verticalSlider_2_sliderMoved(int position)

    imgProc(1.0, position);



void MainWindow::on_verticalSlider_2_valueChanged(int value)

    imgProc(1.0, value);


3.滤波函数

四个滤波函数:

  • cv::blur():均值滤波
  • cv::cv::GaussianBlur():高斯滤波
  • cv::medianBlur():中值滤波
  • cv::bilateralFilter():双边滤波
void MainWindow::imgInit()

    QString imgPath = "test.jpg";
    Mat imgData = imread(imgPath.toLatin1().data());
    if(imgData.empty())qDebug("no img");return;
    cvtColor(imgData,imgData,COLOR_BGR2RGB);
    myImg = imgData;

    myBlurQImg = QImage((const unsigned char*)(imgData.data),imgData.cols,imgData.rows,QImage::Format_RGB888);
    myGaussianQImg   =   myBlurQImg;
    myMedianQImg    =   myBlurQImg;
    myBilateralQImg =   myBlurQImg;

    imgShow();


void MainWindow::imgShow()

    ui->labAverage->setPixmap(QPixmap::fromImage(myBlurQImg.scaled(ui->labAverage->size())));
    ui->labGaussian->setPixmap(QPixmap::fromImage(myGaussianQImg.scaled(ui->labGaussian->size())));
    ui->labMedian->setPixmap(QPixmap::fromImage(myMedianQImg.scaled(ui->labMedian->size())));
    ui->labBilateral->setPixmap(QPixmap::fromImage(myBilateralQImg.scaled(ui->labBilateral->size())));


void MainWindow::imgProc(int kernel)

    Mat src = myImg;

    Mat dst1 = src.clone();
    for (int i=1 ; i<kernel ; i=i+2 ) cv::blur(src,dst1,Size(i,i),Point(-1,-1));
    myBlurQImg = QImage((const unsigned char*)(dst1.data),dst1.cols,dst1.rows,QImage::Format_RGB888);

    Mat dst2 = src.clone();
    for (int i=1 ; i<kernel ; i=i+2 ) cv::GaussianBlur(src,dst2,Size(i,i),0,0);
    myGaussianQImg = QImage((const unsigned char*)(dst2.data),dst2.cols,dst2.rows,QImage::Format_RGB888);

    Mat dst3 = src.clone();
    for (int i=1 ; i<kernel ; i=i+2 ) cv::medianBlur(src,dst3,i);
    myMedianQImg = QImage((const unsigned char*)(dst3.data),dst3.cols,dst3.rows,QImage::Format_RGB888);

    Mat dst4 = src.clone();
    for (int i=1 ; i<kernel ; i=i+2 ) cv::bilateralFilter(src,dst4,i,i*2,i/2);
    myBilateralQImg = QImage((const unsigned char*)(dst4.data),dst4.cols,dst4.rows,QImage::Format_RGB888);

    imgShow();


void MainWindow::on_verticalSlider_sliderMoved(int position)

    imgProc(position);


void MainWindow::on_verticalSlider_valueChanged(int value)

    imgProc(value);



void MainWindow::on_btnsave_clicked()

    QString savefile = QFileDialog::getSaveFileName(this,tr("save file"),QDir::currentPath(),tr("pic(*.jpg *.png *.jpeg *.bmp)"));
    if(savefile.isEmpty())return;
    QScreen *screen = QGuiApplication::primaryScreen();

    if(ui->rbaverage->isChecked()) screen->grabWindow(ui->labAverage->winId()).save(savefile);
    if(ui->rbgaussian->isChecked()) screen->grabWindow(ui->labGaussian->winId()).save(savefile);
    if(ui->rbmedian->isChecked()) screen->grabWindow(ui->labMedian->winId()).save(savefile);
    if(ui->rbbilateral->isChecked()) screen->grabWindow(ui->labBilateral->winId()).save(savefile);


4.混合图像

混合图像函数:

  • cv::addWeighted(原图2,alpha,原图1,1-alpha,gramma,合成图);:alpha在0~1之间
void MainWindow::imgInit()

    Mat imgData = imread("test01.jpg");
    cvtColor(imgData,imgData,COLOR_BGR2RGB);
    myImg = imgData;
    myQImg = QImage((const uchar*)(myImg.data),myImg.cols,myImg.rows,QImage::Format_RGB888);
    imgShow();


void MainWindow::imgProc(float alpha)

    Mat src1 = myImg;
    Mat src2 = imread("test02.jpg");
    cvtColor(src2,src2,COLOR_BGR2RGB);
    //Warning 因为我们对 src1 和 src2 求 和 ,它们必须要有相同的尺寸(宽度和高度)和类型。
    cv::resize(src2,src2,Size(src1.cols,src1.rows));

    Mat dst;
    cv::addWeighted(src2,alpha,src1,1-alpha,0,dst);  //g(i,j)=alpha*f0(i,j)+(1-alpha)*f1(i,j)
    myQImg = QImage((const uchar*)(dst.data),dst.cols,dst.rows,QImage::Format_RGB888);
    imgShow();


void MainWindow::imgShow()

    ui->label->setPixmap(QPixmap::fromImage(myQImg.scaled(ui->label->size())));



void MainWindow::on_verticalSlider_sliderMoved(int position)

    imgProc(position/100.0);



void MainWindow::on_verticalSlider_valueChanged(int value)

    imgProc(value/100.0);


qt学习_qgraphics进阶学习笔记(代码片段)

QGraphics进阶学习1.保存图片函数QPixmapQWidget::grab(constQRect&rectangle=QRect(QPoint(0,0),QSize(-1,-1)))Rendersthewidgetintoapixmaprestrictedbythegivenrectangle.Ifthewidgethasanychildren,thentheyareals 查看详情

将opencv的imread()函数读取的图片用qlabel显示(代码片段)

switchPicture.pyfromPyQt5.QtCoreimport*fromPyQt5.QtWidgetsimport*fromPyQt5.QtGuiimport*importnumpyasnpimportcv2importsysclassMyWidget(QWidget):def__init__(self,parent=None):super().__init__(parent)sel 查看详情

qt学习_log分析器程序(代码片段)

log分析器程序需求文本框显示行数,所在行显示高亮实现拖拽加载,压缩包线程解析,加载log文件查找关键字实现1.打开多个log文件,并按时间排序显示//打开文件voidMainWindow::on_actionfile_triggered()ui->plainTextEdit->... 查看详情

opencv学习_pthon版opencv基础使用(代码片段)

opencv使用绘制图片#!/usr/bin/envpython3#-*-coding:utf-8-*-defmain(args): importcv2 importnumpy mat=numpy.zeros((300,400),dtype=numpy.uint8) mat=cv2.cvtColor(mat,cv2.COLOR_GRAY2BGR) cv2.imshow( 查看详情

qt学习_qgraphics进阶学习笔记(代码片段)

QGraphics进阶学习1.保存图片函数QPixmapQWidget::grab(constQRect&rectangle=QRect(QPoint(0,0),QSize(-1,-1)))Rendersthewidgetintoapixmaprestrictedbythegivenrectangle.Ifthewidgethasanychildren,thentheyarealsopaintedintheappropriatepositions.Ifarectanglewithaninvalidsizeisspecified(thede... 查看详情

opencv读入图片注意事项(代码片段)

...:蓬蓬奇编辑:学姐深度学习数据预处理中常用opencv读入图片,一般在__getitem__函数中调用。本文主要介绍opencv读取图片的一些细节以及注意事项。本文中使用的图片见第6节“opencv测试使用的图片”。1.如何通过opencv... 查看详情

python+opencv(入门级)车道线检测学习笔记(代码片段)

文章目录前言一、openCV安装二、尝试使用cv2中库函数1.读取图片2.图片显示3.延时/暂停4.保存图片5.清楚所有窗口三、Canny边缘检测1.高斯滤波2.图片转换3.边缘检测四、ROIandmask五、霍夫变换六、离群值过滤七、最小二乘法拟合八、... 查看详情

opencv4.0学习笔记(代码片段)

...,有点难受。还好最后显示出第一张图片。#include<opencv2/opencv.hpp>#include<iostream>usingnamespacestd;usingnamespacecv;intmain() Matsrc= 查看详情

opencv入门学习笔记(代码片段)

一.认识Opencv开源计算机视觉(Opencv)是一个主要针对实时计算机视觉的编程函数库。Opencv支持深度学习框架TensorFlow,Torch/PyTorch和Caffe。二.Opencv的简单绘图和显示图片1.显示图片①显示图片importcv2importnumpyasnpimg=cv2.i... 查看详情

qt学习_qt远程文件升级(代码片段)

QT文档升级首先写配置文件:[update]filename="D:\\\\lesliex\\\\QTpro\\\\UpdatePro\\\\testupdatefile\\\\file";checkname="file";代码选择已更新的文件夹voidMainWindow::on_pushButton_clicked()update 查看详情

opencv_c++学习(代码片段)

...,0);IMREAD_COLOR(>0)表示把原图作为RGB图像加载进来。注意:OpenCV支持JPG、PNG、TIFF等常见格式图像文件加载。二、显示图像cv::namedWindos与cv::imshownamedWindos功能是创建一个OpenCV窗口,它是由opencv自动创建与释放,你无需取销毁它。... 查看详情

qt学习_qt实现拖拽功能(代码片段)

QT实现拖拽功能重写两个虚函数voiddragEnterEvent(QDragEnterEvent*event);voiddropEvent(QDropEvent*event);例子voidMainWindow::dragEnterEvent(QDragEnterEvent*event)if(event->mimeData()->hasUrls())//若是文件路径则允许拖拽eve 查看详情

qt学习_qlistview使用(代码片段)

QListView使用创建一个QStringList创建一个QStringListModelQStringListstr;QStringListModelstrMod;strMod.setStringList(str);设置QListViewQListViewview;view.setModel(strMod);QListView的增删增://列表末尾添加项strMod.insert 查看详情

qt学习_menu菜单(代码片段)

Menu菜单voidWidget::MenuRequested(QPointp)QMenu*menu=newQMenu(this);menu->setAttribute(Qt::WA_DeleteOnClose);menu->addAction("resize",this,[=]()ui->cw->rescaleAxes();ui->c 查看详情

qt学习_qt图形视图(代码片段)

QT图形视图框架GraphicsView一、主要特点系统可以利用openGL工具改善绘图性能支持事件传播体系结构通过二元空间划分树提供快速的图元查找二、三元素场景类(QGraphicsScene):用于放置图元的容器,本身不可见,需要搭配... 查看详情

opencv学习笔记1基础:读取显示保存图像(代码片段)

文章目录1.读取图像2.显示图像3.保存图像ReferencesOpenCV读取图片非常方便,但是需要注意OpenCV默认使用BGR模式,而不是RGB模式,如果需要使用其他工具处理,需要注意这一点。1.读取图像使用imread函数读取图像:... 查看详情

qt学习_qt调用cmd指令(代码片段)

QT调用Windows的cmd指令知识点QProcess进程的使用process.start(程序,参数指令)process.waitForStarted()process.waitForFinished()process.close()cmd指令的使用cmd/c指令功能运行选择的程序获取选择程序的pid通过taskkill关闭程序进程开启程序voidMainWind... 查看详情

python学习_安装opencv(代码片段)

opencv安装安装pip3install--upgradepippip3installopencv-python若发现importcv2出现问题1:ImportError:libcblas.so.3:cannotopensharedobjectfile:Nosuchfileordirectory解决sudoapt-getinstalllibatlas-base-dev问题2:ImportErro 查看详情