最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV+Qt實現(xiàn)圖像處理操作

 更新時間:2022年08月05日 15:28:01   作者:我今年十六歲  
這篇文章主要為大家詳細(xì)介紹了OpenCV+Qt實現(xiàn)圖像處理操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了OpenCV+Qt實現(xiàn)圖像處理操作的具體代碼,供大家參考,具體內(nèi)容如下

一、目標(biāo)

Qt界面實現(xiàn) 雪花屏 高斯模糊 中值濾波 毛玻璃 灰度化 XY方向模糊 雙邊模糊 腐蝕 [圖像處理操作]

要求左邊原圖,右邊效果圖

結(jié)果展示如下:[圖像處理實現(xiàn)有點多,就不一個一個地展示了,各別展示如下]

雪花屏

毛玻璃

灰度化處理

二、使用Qt界面

使用到Qt中的UI設(shè)計界面

設(shè)計好界面之后最好先保存

對每一個按鈕設(shè)計槽函數(shù)

三、圖像處理操作完整代碼

難點在于:Qt是QImage而OpenCV是Mat,需要Mat轉(zhuǎn)QImage才能在Qt界面中進行圖片的正常顯示

頭文件中導(dǎo)入opencv包 

#ifndef WIDGET_H
#define WIDGET_H
#include<opencv2/opencv.hpp>
#include <QWidget>
using namespace cv;
?
QT_BEGIN_NAMESPACE
namespace Ui {class Widget;}
QT_END_NAMESPACE
?
class Widget : public QWidget
{
? ? Q_OBJECT
public:
// ?Widget(QWidget *parent = nullptr);
? ? explicit Widget(QWidget *parent = 0);
? ? ~Widget();
?
private slots:
? ? void on_pushButton_clicked();//雪花屏
? ? void on_pushButton_2_clicked();//高斯模糊
? ? void on_pushButton_3_clicked();//中值濾波
? ? void on_pushButton_4_clicked();//毛玻璃
? ? void on_pushButton_5_clicked();//灰度化
? ? void on_pushButton_6_clicked();//XY方向模糊
? ? void on_pushButton_7_clicked();//雙邊模糊
? ? void on_pushButton_8_clicked();//腐蝕
private:
? ? Ui::Widget *ui;
? ? Mat srcimage;//原圖
};
?
#endif // WIDGET_H

源文件中實現(xiàn)圖像處理方法 

#include "widget.h"
#include "ui_widget.h"
?
Widget::Widget(QWidget *parent) :
? ? QWidget(parent),
? ? ui(new Ui::Widget)
{
? ? ui->setupUi(this);
}
?
Widget::~Widget()
{
? ? delete ui;
}
?
//雪花屏
void Widget::on_pushButton_clicked()
{
? ? //讀取原始圖片
? ? Mat srcimage = imread("D:/000imageopencv/efls111.jpg");
? ? //Mat轉(zhuǎn)QImage 顏色
? ? cvtColor(srcimage,srcimage,CV_BGR2RGB);
? ? //Mat轉(zhuǎn)QImage 像素 ? oldlabel放置原圖
? ? QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage = disimage.scaled(ui->oldlabel->width(),ui->oldlabel->height());
? ? ui->oldlabel->setPixmap(QPixmap::fromImage(disimage));
?
? ? //像素二維矩陣函數(shù)
? ? int rows = srcimage.rows;
? ? //像素二維矩陣列數(shù)
? ? int cols = srcimage.cols * srcimage.channels();
? ? for(int i=0;i<rows;i++)
? ? {
? ? ? ? uchar * data = srcimage.ptr<uchar>(i);
? ? ? ? for(int j=0;j<cols;j++)
? ? ? ? {
? ? ? ? ? ? //雪花屏特效
? ? ? ? ? ? int q = rand()%cols;
? ? ? ? ? ? data[q]=155;//某些通道隨機改成155
? ? ? ? }
? ? }
? ? //Mat轉(zhuǎn)QImage 像素 ? newlabel放置圖像處理后圖片
? ? QImage disimage2 = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
? ? ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
}
?
//高斯模糊
void Widget::on_pushButton_2_clicked()
{
? ? //讀取原始圖片
? ? Mat srcimage = imread("D:/000imageopencv/efls111.jpg");
? ? //Mat轉(zhuǎn)QImage 顏色
? ? cvtColor(srcimage,srcimage,CV_BGR2RGB);
? ? //Mat轉(zhuǎn)QImage 像素 ? oldlabel放置原圖
? ? QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
?
? ? Mat retimage;
? ? //高斯模糊
? ? GaussianBlur(srcimage,retimage,Size(5,5),0,0);
?
? ? //Mat轉(zhuǎn)QImage 像素 ? newlabel放置圖像處理后圖片
? ? QImage disimage2 = QImage(retimage.data,retimage.cols,retimage.rows,retimage.cols*retimage.channels(),QImage::Format_RGB888);
? ? disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
? ? ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
}
?
//中值濾波
void Widget::on_pushButton_3_clicked()
{
? ? //讀取原始圖片
? ? Mat srcimage = imread("D:/000imageopencv/efls111.jpg");
? ? //Mat轉(zhuǎn)QImage 顏色
? ? cvtColor(srcimage,srcimage,CV_BGR2RGB);
? ? //Mat轉(zhuǎn)QImage 像素 ? oldlabel放置原圖
? ? QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage = disimage.scaled(ui->oldlabel->width(),ui->oldlabel->height());
? ? ui->oldlabel->setPixmap(QPixmap::fromImage(disimage));
?
? ? Mat retumage;
? ? //中值濾波
? ? medianBlur(srcimage,retumage,5);
?
? ? //Mat轉(zhuǎn)QImage 像素 ? newlabel放置圖像處理后圖片
? ? QImage disimage2 = QImage(retumage.data,retumage.cols,retumage.rows,retumage.cols*retumage.channels(),QImage::Format_RGB888);
? ? disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
? ? ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
}
?
//毛玻璃
void Widget::on_pushButton_4_clicked()
{
? ? //讀取原始圖片
? ? Mat srcimage = imread("D:/000imageopencv/efls111.jpg");
? ? //Mat轉(zhuǎn)QImage 顏色
? ? cvtColor(srcimage,srcimage,CV_BGR2RGB);
? ? //Mat轉(zhuǎn)QImage 像素 ? oldlabel放置原圖
? ? QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage = disimage.scaled(ui->oldlabel->width(),ui->oldlabel->height());
? ? ui->oldlabel->setPixmap(QPixmap::fromImage(disimage));
?
? ? //毛玻璃
? ? RNG rng;
? ? int random;
? ? int num = 5;
? ? for(int i=0;i<srcimage.rows -num;i++)
? ? {
? ? ? ? for(int j=0;j<srcimage.cols -num;j++)
? ? ? ? {
? ? ? ? ? ? //通過rng返回0-15隨機數(shù)
? ? ? ? ? ? random = rng.uniform(0,num);
? ? ? ? ? ? srcimage.at<Vec3b>(i,j)[0] = srcimage.at<Vec3b>(i+random,j+random)[0];
? ? ? ? ? ? srcimage.at<Vec3b>(i,j)[1] = srcimage.at<Vec3b>(i+random,j+random)[1];
? ? ? ? ? ? srcimage.at<Vec3b>(i,j)[2] = srcimage.at<Vec3b>(i+random,j+random)[2];
? ? ? ? }
? ? }
?
? ? //Mat轉(zhuǎn)QImage 像素 ? newlabel放置圖像處理后圖片
? ? QImage disimage2 = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
? ? ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
}
?
//灰度化
void Widget::on_pushButton_5_clicked()
{
? ? //讀取原始圖片
? ? Mat srcimage = imread("D:/000imageopencv/efls111.jpg");
? ? //Mat轉(zhuǎn)QImage 顏色
? ? cvtColor(srcimage,srcimage,CV_BGR2RGB);
? ? //Mat轉(zhuǎn)QImage 像素 ? oldlabel放置原圖
? ? QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage = disimage.scaled(ui->oldlabel->width(),ui->oldlabel->height());
? ? ui->oldlabel->setPixmap(QPixmap::fromImage(disimage));
?
? ? Mat retumage;
? ? //灰度處理 灰度是單通道8位 QImage是24位三通道
? ? cvtColor(srcimage,retumage,CV_BGR2GRAY);
? ? cvtColor(retumage,retumage,CV_GRAY2BGR);
?
? ? //Mat轉(zhuǎn)QImage 像素 ? newlabel放置圖像處理后圖片
? ? QImage disimage2 = QImage(retumage.data,retumage.cols,retumage.rows,retumage.cols*retumage.channels(),QImage::Format_RGB888);
? ? disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
? ? ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
}
?
//XY方向模糊
void Widget::on_pushButton_6_clicked()
{
? ? //讀取原始圖片
? ? Mat srcimage = imread("D:/000imageopencv/efls111.jpg");
? ? //Mat轉(zhuǎn)QImage 顏色
? ? cvtColor(srcimage,srcimage,CV_BGR2RGB);
? ? //Mat轉(zhuǎn)QImage 像素 ? oldlabel放置原圖
? ? QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage = disimage.scaled(ui->oldlabel->width(),ui->oldlabel->height());
? ? ui->oldlabel->setPixmap(QPixmap::fromImage(disimage));
?
? ? Mat retumage;
? ? //xy軸模糊
? ? blur(srcimage,retumage,Size(10,10));
?
? ? //Mat轉(zhuǎn)QImage 像素 ? newlabel放置圖像處理后圖片
? ? QImage disimage2 = QImage(retumage.data,retumage.cols,retumage.rows,retumage.cols*retumage.channels(),QImage::Format_RGB888);
? ? disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
? ? ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
}
?
//雙邊模糊
void Widget::on_pushButton_7_clicked()
{
? ? //讀取原始圖片
? ? Mat srcimage = imread("D:/000imageopencv/efls111.jpg");
? ? //Mat轉(zhuǎn)QImage 顏色
? ? cvtColor(srcimage,srcimage,CV_BGR2RGB);
? ? //Mat轉(zhuǎn)QImage 像素 ? oldlabel放置原圖
? ? QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage = disimage.scaled(ui->oldlabel->width(),ui->oldlabel->height());
? ? ui->oldlabel->setPixmap(QPixmap::fromImage(disimage));
?
? ? Mat retumage;
? ? //雙倍模糊
? ? cv::bilateralFilter(srcimage,retumage,15,120,10,4);
?
? ? //Mat轉(zhuǎn)QImage 像素 ? newlabel放置圖像處理后圖片
? ? QImage disimage2 = QImage(retumage.data,retumage.cols,retumage.rows,retumage.cols*retumage.channels(),QImage::Format_RGB888);
? ? disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
? ? ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
}
?
//腐蝕
void Widget::on_pushButton_8_clicked()
{
? ? //讀取原始圖片
? ? Mat srcimage = imread("D:/000imageopencv/efls111.jpg");
? ? //Mat轉(zhuǎn)QImage 顏色
? ? cvtColor(srcimage,srcimage,CV_BGR2RGB);
? ? //Mat轉(zhuǎn)QImage 像素 ? oldlabel放置原圖
? ? QImage disimage = QImage(srcimage.data,srcimage.cols,srcimage.rows,srcimage.cols*srcimage.channels(),QImage::Format_RGB888);
? ? disimage = disimage.scaled(ui->oldlabel->width(),ui->oldlabel->height());
? ? ui->oldlabel->setPixmap(QPixmap::fromImage(disimage));
?
? ? Mat retumage;
? ? //腐蝕
? ? Mat element = cv::getStructuringElement(MORPH_RECT,Size(5,5));
? ? cv::erode(srcimage,retumage,element);
?
? ? //Mat轉(zhuǎn)QImage 像素 ? newlabel放置圖像處理后圖片
? ? QImage disimage2 = QImage(retumage.data,retumage.cols,retumage.rows,retumage.cols*retumage.channels(),QImage::Format_RGB888);
? ? disimage2 = disimage2.scaled(ui->newlabel->width(),ui->newlabel->height());
? ? ui->newlabel->setPixmap(QPixmap::fromImage(disimage2));
}

主入口Qt窗口顯示 

#include "widget.h"
#include <QApplication>
?
int main(int argc, char *argv[])
{
? ? QApplication a(argc, argv);
? ? Widget w;
? ? w.show();
? ? return a.exec();
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

郸城县| 辛集市| 乌兰浩特市| 福泉市| 巨鹿县| 调兵山市| 济宁市| 仁寿县| 谷城县| 南部县| 贡嘎县| 伊通| 邯郸市| 九寨沟县| 罗定市| 浑源县| 页游| 翼城县| 临沧市| 长岛县| 河间市| 三穗县| 大悟县| 廊坊市| 获嘉县| 浮山县| 远安县| 疏勒县| 福鼎市| 泽普县| 东乌珠穆沁旗| 玉环县| 平乐县| 娱乐| 彭泽县| 宝鸡市| 深泽县| 临沭县| 南郑县| 隆化县| 河东区|