基于Qt+OpenCV實(shí)現(xiàn)圖像灰度化像素
這篇文章主要介紹了基于Qt OpenCV怎么實(shí)現(xiàn)圖像灰度化像素的相關(guān)知識(shí)
效果圖

實(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);
}以上就是基于Qt+OpenCV實(shí)現(xiàn)圖像灰度化像素的詳細(xì)內(nèi)容,更多關(guān)于Qt OpenCV圖像灰度化像素的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于c++ ege圖形庫(kù)實(shí)現(xiàn)五子棋游戲
這篇文章主要為大家詳細(xì)介紹了基于c++ ege圖形庫(kù)實(shí)現(xiàn)五子棋游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
C語言實(shí)現(xiàn)簡(jiǎn)單的推箱子小游戲
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡(jiǎn)單的推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
利用C語言實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的飛機(jī)游戲
在前面彈跳小球?的基礎(chǔ)上實(shí)現(xiàn)一個(gè)簡(jiǎn)單的飛機(jī)游戲,主要包括飛機(jī)的顯示、控制移動(dòng)、顯示復(fù)雜圖案、發(fā)射激光、打靶練習(xí)等功能,感興趣的可以嘗試一下2022-10-10
C/C++實(shí)現(xiàn)string和int相互轉(zhuǎn)換的常用方法總結(jié)
在C++編程中,經(jīng)常需要在字符串(string)和整型(int)之間進(jìn)行轉(zhuǎn)換,本文將詳細(xì)介紹幾種在C和C++中實(shí)現(xiàn)這兩種類型轉(zhuǎn)換的常用方法,有需要的可以參考下2024-01-01
vscode遠(yuǎn)程連接服務(wù)器(免密登錄+遠(yuǎn)程開發(fā))
vscode的遠(yuǎn)程連接功能十分方便,本文就來介紹一下vscode遠(yuǎn)程連接服務(wù)器,主要包括免密登錄和遠(yuǎn)程開發(fā),感興趣的可以了解一下2024-07-07

