基于Qt OpenCV的圖像灰度化像素操作詳解
效果圖
實(shí)現(xiàn)代碼
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<opencv2/opencv.hpp> using namespace cv; QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private slots: void TheMax(Mat Input_iamge); void TheMean(Mat Input_iamge); void TheMeightedMean(Mat Input_iamge); void UI_init(); private: Ui::Widget *ui; }; #endif // WIDGET_H
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); UI_init(); //init ui Mat image_1=imread("D:/program/Qt/Qt5+opencv/108homework/me.png"); ui->image1->setPixmap(QPixmap("D:/program/Qt/Qt5+opencv/108homework/me.png")); TheMax(image_1); ui->image2->setPixmap(QPixmap("D:/program/Qt/Qt5+opencv/108homework/image_2.png")); TheMean(image_1); ui->image3->setPixmap(QPixmap("D:/program/Qt/Qt5+opencv/108homework/image_3.png")); TheMeightedMean(image_1); ui->image4->setPixmap(QPixmap("D:/program/Qt/Qt5+opencv/108homework/image_4.png")); } Widget::~Widget() { delete ui; } void Widget::TheMax(Mat Input_iamge) { int width = Input_iamge.cols; int height = Input_iamge.rows; Mat image_2(height,width,CV_8UC1); for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { int b = Input_iamge.at<Vec3b>(j, i)[0]; int g = Input_iamge.at<Vec3b>(j, i)[1]; int r = Input_iamge.at<Vec3b>(j, i)[2]; image_2.at<uchar>(j, i) = saturate_cast<uchar>(max(r,max(b,g))); } } imwrite("D:/program/Qt/Qt5+opencv/108homework/image_2.png", image_2); } void Widget::TheMean(Mat Input_iamge) { int width = Input_iamge.cols; int height = Input_iamge.rows; Mat image_3(height,width,CV_8UC1); for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { int b = Input_iamge.at<Vec3b>(j, i)[0]; int g = Input_iamge.at<Vec3b>(j, i)[1]; int r = Input_iamge.at<Vec3b>(j, i)[2]; image_3.at<uchar>(j, i) = saturate_cast<uchar>((r+g+b)/3); } } imwrite("D:/program/Qt/Qt5+opencv/108homework/image_3.png", image_3); } void Widget::TheMeightedMean(Mat Input_iamge) { int width = Input_iamge.cols; int height = Input_iamge.rows; Mat image_4(height,width,CV_8UC1); for (int j = 0; j < height; j++) { for (int i = 0; i < width; i++) { int b = Input_iamge.at<Vec3b>(j, i)[0]; int g = Input_iamge.at<Vec3b>(j, i)[1]; int r = Input_iamge.at<Vec3b>(j, i)[2]; image_4.at<uchar>(j, i) = saturate_cast<uchar>(0.299*r + 0.587*g + 0.114*b); } } imwrite("D:/program/Qt/Qt5+opencv/108homework/image_4.png", image_4); } void Widget::UI_init() { ui->image1->setFrameShape(QFrame::Box); ui->image1->setFrameShadow(QFrame::Sunken); ui->image1->setLineWidth(5); ui->image1->setLineWidth(10); ui->image2->setFrameShape(QFrame::Box); ui->image2->setFrameShadow(QFrame::Sunken); ui->image2->setLineWidth(5); ui->image2->setLineWidth(10); ui->image3->setFrameShape(QFrame::Box); ui->image3->setFrameShadow(QFrame::Sunken); ui->image3->setLineWidth(5); ui->image3->setLineWidth(10); ui->image4->setFrameShape(QFrame::Box); ui->image4->setFrameShadow(QFrame::Sunken); ui->image4->setLineWidth(5); ui->image4->setLineWidth(10); }
到此這篇關(guān)于基于Qt OpenCV的圖像灰度化像素操作詳解的文章就介紹到這了,更多相關(guān)Qt OpenCV圖像灰度化操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法
今天小編就為大家分享一篇關(guān)于C語(yǔ)言對(duì)CSV文件從最后往前一行一行讀取的實(shí)現(xiàn)方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12C語(yǔ)言 經(jīng)典題目螺旋矩陣 實(shí)例詳解
這篇文章主要介紹了C語(yǔ)言 經(jīng)典題目螺旋矩陣 實(shí)例詳解的相關(guān)資料,這里附有代碼實(shí)例及實(shí)現(xiàn)效果圖,需要的朋友可以參考下2016-12-12一篇文章帶你了解C語(yǔ)言文件操作中的幾個(gè)函數(shù)
這篇文章主要介紹了使用C語(yǔ)言操作文件的基本函數(shù)整理,包括創(chuàng)建和打開(kāi)以及關(guān)閉文件的操作方法,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助2021-09-09C++詳解如何實(shí)現(xiàn)兩個(gè)線(xiàn)程交替打印
這篇文章主要介紹了使用C++庫(kù)實(shí)現(xiàn)兩個(gè)線(xiàn)程交替打印,一個(gè)線(xiàn)程打印奇數(shù)、一個(gè)線(xiàn)程打印偶數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08C語(yǔ)言結(jié)構(gòu)體簡(jiǎn)單入門(mén)講解
這篇文章主要介紹了C語(yǔ)言結(jié)構(gòu)體簡(jiǎn)單入門(mén)講解,本文講述了結(jié)構(gòu)體的基本定義和操作,講解了幾個(gè)比較實(shí)用的函數(shù)和案例,希望對(duì)你有所幫助2021-06-06c語(yǔ)言小游戲程序之彈跳小球的實(shí)現(xiàn)代碼
這篇文章主要介紹了c語(yǔ)言小游戲程序之彈跳小球的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12使用C語(yǔ)言中的time函數(shù)獲取系統(tǒng)時(shí)間
在C語(yǔ)言中可以使用time函數(shù)來(lái)獲取系統(tǒng)時(shí)間,以下對(duì)time函數(shù)進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下2013-07-07java string對(duì)象上的操作,常見(jiàn)的用法你知道嗎
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java String類(lèi)用法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-08-08