基于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-12
C語(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-09
C++詳解如何實(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-08
C語(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-06
c語(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-07
java string對(duì)象上的操作,常見(jiàn)的用法你知道嗎
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java String類(lèi)用法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-08-08

