基于Qt OpenCV的图像灰度化像素操作详解

效果图

实现代码

#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的图像灰度化像素操作详解的文章就介绍到这了,更多相关Qt OpenCV图像灰度化操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++ opencv图像处理实现灰度变换示例

    目录 灰度变换概念 灰度变换的作用 灰度变换的方法 灰度化 灰度的概念 对彩色图进行灰度化 1.加权平均值法 2.取最大值 3.平均值 灰度的线性变换 1.线性变换 2.分段线性变换 灰度的非线性变换 1.对数变换 2.幂律变换 总结 灰度变换概念 在图像预处理中,图像的灰度变换是图像增强的重要手段,灰度变换可以使图像对比度扩展,图像清晰,特征明显,灰度变换主要利用点运算来修正像素灰度,由输入像素点的灰度值确定相应输出点的灰度值,是一种基于图像变换的操作. 灰度变换的作用 1.改善图像是质量,显

  • OpenCV图像处理之常见的图像灰度变换

    1.灰度线性变换 图像的灰度线性变换是图像灰度变换的一种,图像的灰度变换通过建立灰度映射来调整源图像的灰度,从而达到图像增强的目的.灰度映射通常是用灰度变换曲线来进行表示.通常来说,它是将图像的像素值通过指定的线性函数进行变换,以此来增强或者来减弱图像的灰度,灰度线性变换的函数就是常见的线性函数. g(x, y) = k · f(x, y) + d 设源图像的灰度值为x,则进行灰度线性变换后的灰度值为y = kx + b (0<=y<=255),下面分别来讨论k的取值变化时线性变换的不同效果

  • 聊聊Qt+OpenCV联合开发之图像的创建与赋值问题

    目录 一.Mat基本结构 二.图像的克隆及拷贝 1.clone函数 2.copyTo函数 3.示例 三.创建图像 1.创建空白图像: 2.创建通道都为1的图: 3.拷贝和赋值的区别 3.1用Scalar函数设置m3对象为绿色 3.2m3赋值给m4,m4改为黄色 3.3拷贝m3给m4,m4改为黄色 一.Mat基本结构 1.Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类,它mat分为头部(包括图像的大小.宽高.类型.通道数等)和数据部分(像素的值的集合) 2.获取的mat对象赋值给另

  • Opencv实现图像灰度线性变换

    本文实例为大家分享了Opencv实现图像灰度线性变换的具体代码,供大家参考,具体内容如下 通过图像灰度线性变换提高图像对比度和亮度,原图像为src,目标图像为dst,则dst(x,y) = * src(x,y) + . 不仅对单通道图像可以做灰度线性变换,对三通道图像同样可以. #include<opencv2/opencv.hpp>; #include<iostream> using namespace cv; using namespace std; int main(int

  • OpenCV灰度化之后图片为绿色的解决

    首先需要读图片,查看图片 import cv2 img_opencv = cv2.imread('C:/Users/20752/Desktop/GraduationProject/DogFace/DogFace/OpenSourceCrop_align/0/0.0.png')# BGR plt.figure() plt.imshow(img_opencv) plt.show() 图片与平时看到的不太一样,因为是BGR个格式,平时看到的是RGB格式. 之后转化为灰度图 gray_img = cv2

  • 基于Qt OpenCV的图像灰度化像素操作详解

    效果图 实现代码 #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 *

  • 基于Qt OpenCV实现图像数据采集软件

    效果图 示例代码 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QTimer> #include<QDebug> #include<QDateTime> #include<opencv2/opencv.hpp> using namespace cv; using namespace std; QT_BEGIN_NAMESPACE namespace Ui { class

  • opencv3/C++图像像素操作详解

    RGB图像转灰度图 RGB图像转换为灰度图时通常使用: 进行转换,以下尝试通过其他对图像像素操作的方式将RGB图像转换为灰度图像. #include<opencv2/opencv.hpp> #include<math.h> using namespace cv; int main() { //像素操作 Mat src,dst; src = imread("E:/image/image/daibola.jpg"); if(src.empty()) { printf

  • QT中对Mat类的一些操作详解

    目录 一.类型转换 二.保存至数据库 一.类型转换 opencv在QT中的应用通常会涉及到这三者的转换,即Mat.QImage.QPixmap.下面分别给出了 Mat转QImage QImage转Mat Mat转QPixmap 1️⃣:Mat转QImage QImage MainWindow::MatToImage(const Mat &m) //Mat转Image { switch(m.type()) { case CV_8UC1: { QImage img((uchar *)m.data,m

  • Java底层基于链表实现集合和映射--集合Set操作详解

    本文实例讲述了Java底层基于链表实现集合和映射--集合Set操作.分享给大家供大家参考,具体如下: 在Java底层基于二叉搜索树实现集合和映射中我们实现了底层基于二叉搜索树的集合,本节就底层如何基于链表实现进行学习,注意:此处的链表是之前自己封装的. 1.集合set相关功能 1.1 add()的不同 用于链表本身没有去重的效果,因此我们在做基于链表的集合时,需要对add()方法做一下特殊处理,如下增加一个判断即可. @Override public void add(E e) { if (!l

  • 基于c#图像灰度化、灰度反转、二值化的实现方法详解

    图像灰度化:将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围.而灰度图像是R.G.B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些.灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征.图像的灰度

  • 详解Java如何实现图像灰度化

    24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图像存储为32位图像,每个像素多余的字节存储为一个alpha值,表现有特殊影响的信息[1]. 在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值.亮度值),灰度范围为0-255[2].这样就得到一幅图片的灰度图. 几种灰度化的方法 1.分量法:使用RGB三个分量中

  • Android实现图像灰度化、线性灰度变化和二值化处理方法

    1.图像灰度化: public Bitmap bitmap2Gray(Bitmap bmSrc) { // 得到图片的长和宽 int width = bmSrc.getWidth(); int height = bmSrc.getHeight(); // 创建目标灰度图像 Bitmap bmpGray = null; bmpGray = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565); // 创建画布 Canvas c = ne

  • 基于Python OpenCV实现图像的覆盖

    目录 前言 1.导入相关库 2.使用OpenCV读取和显示图像 3.从物体的图像中去除背景 4.添加对象到背景图像 5.结果展示 前言 在本文中,我将展示如何将对象从一个图像添加到另一个图像.为此,我们需要: 1.背景图像; 2.对象 3.对象的mask(mask为黑色,其他空间为白色). 在我们的例子中,背景是一张大海的照片,对象是一杯咖啡.在这里,他们是: 1.导入相关库 现在,使用jupiter notebook创建一个新文件.首先,我们需要导入必要的模块: import cv2 # Op

  • C#数字图象处理之图像灰度化方法

    本文实例讲述了C#数字图象处理之图像灰度化方法.分享给大家供大家参考.具体如下: //定义图像灰度化函数 private static Bitmap PGray(Bitmap src) { int w = src.Width; int h = src.Height; //构建与原图像大小一样的模版图像 Bitmap dstBitmap = new Bitmap(src.Width, src.Height, System.Drawing.Imaging.PixelFormat.Format24bp

随机推荐