对RGB图像进行灰度化(方法 + 代码)

对RGB图像进行灰度化,通俗点说就是对图像的RGB三个分量进行加权平均得到最终的灰度值。最常见的加权方法如下:

1)Gray=B;Gray=G;Gray=R

2)Gray=max(B+G+R)

3)Gray=(B+G+R)/3

4)Gray= 0.072169B+ 0.715160G+ 0.212671R

5)Gray= 0.11B+ 0.59G+ 0.3R

第一种为分量法,即用RGB三个分量的某一个分量作为该点的灰度值

第二种方法为最大值法,将彩色图像中的三分量亮度的最大值作为灰度图的灰度值

第三种方法将彩色图像中的三分量亮度求平均得到一个灰度图;

第四种是OpenCV开放库所采用的灰度权值

第五种为从人体生理学角度所提出的一种权值(人眼对绿色的敏感最高,对蓝色敏感最低)

 1 Mat rgb2grey(Mat src)
 2 {
 3     float R, G, B;
 4
 5     int nr = src.rows; // 原图像行数
 6     int nc = src.cols; // 原图像列数
 7
 8     Mat dst(src.size(), CV_8UC1);//创建一个大小与 image 相同的八位单通道Mat图
 9
10     for (int y = 0; y < nr; y++)//遍历原图像
11     {
12         uchar* data = dst.ptr<uchar>(y);//无符号字符型指针,用来指向灰度图像的每一个像素
13
14         for (int x = 0; x < nc; x++)
15         {
16             // 访问RGB图像每个像素点的三个通道:0、1、2 分别对应 B、G、R
17             B = src.at<Vec3b>(y, x)[0];
18             G = src.at<Vec3b>(y, x)[1];
19             R = src.at<Vec3b>(y, x)[2];
20
21             data[x] = (int)(R * 0.3 + G * 0.59 + B * 0.11);// 加权平均法,将BGR三列合为一列
22         }
23     }
24     return dst;
25 }
时间: 2024-10-29 19:11:14

对RGB图像进行灰度化(方法 + 代码)的相关文章

基于FPGA的RGB图像转灰度图像算法实现

一.前言 最近学习牟新刚编著<基于FPGA的数字图像处理原理及应用>的第六章直方图操作,由于需要将捕获的图像转换为灰度图像,因此在之前代码的基础上加入了RGB图像转灰度图像的算法实现. 2020-02-29 10:38:40 二.RGB图像转灰度图像算法原理 将彩色图像转换为灰度图像的方法有两种,一个是令RGB三个分量的数值相等.输出后便可以得到灰度图像,另一种是转换为YCbCr格式,将Y分量提取出来,YCbCr格式中的Y分量表示的是图 像的亮度和浓度,所以只输出Y分量,得到图像就是灰度图像.

RGB图像转为灰度图

最后结论: Grey = (R*38 + G*75 + B*15)>> 7 代码 #include <cv.h> #include <highgui.h> using namespace cv; int main(){ Mat src= imread("C:\\Users\\Poplar\\Pictures\\ff.jpg"); Matgrey(src.rows, src.cols, CV_8UC1, Scalar(0)); for (inty =

[转载+原创]Emgu CV on C# (二) —— Emgu CV on 灰度化

本文主要对彩色图片灰度化的方法及其实现过程进行总结,最终给出Emgu CV实现的代码. 一.灰度化原理及数学实现(转载自——<图像灰度化方法总结及其VC实现> 该篇文章使用opencv实现,后面附有代码,可以好好学习一下,比我写的好\(^o^)/~) 图像处理时,通常第一个步骤就是对采集到的彩色图像进行灰度化,这是因为黑白照片数据量小,相比彩照更易实现实时算法,另一方面黑白照片是由未处理的光线所形成的照片,因此从图像处理学角度来看,这种未经特殊滤光处理的图片所涵盖的信息更有价值. 目前,在图像

c#图像灰度化、灰度反转、二值化

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

图像 - 灰度化、灰度反转、二值化

原文地址:http://www.cnblogs.com/gdjlc/archive/2013/03/05/2943801.html 图像灰度化: 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理.彩色图像中的每个像素的颜色有R.G.B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围.而灰度图像是R.G.B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图

图像灰度化

1彩色图,灰度图,单色图 灰度图是指只含亮度信息,不含色彩信息的图像.灰度化处理是把含有亮度和色彩的彩色图像变化成灰度图像的过程. 图像灰度化处理一般采用以下三种算法: 平均值法: f(i,j)=(R(i,j)+G(i,j)+B(i,j))/3 最大值法: f(i,j)=max(R(i,j),G(i,j),B(i,j)) 加权平均值法:f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j) 2 图像灰度化opencv 1 #include <opencv2/opencv.

java实现图像灰度化

/*在研究Java实现将一张图片转成字符画的时候,发现将图像转化字符串是根据照片的灰度采用不同的字符画出来,形成一个灰度表.于是就研究了下关于灰度值这个东西,于是跳了一个大坑...因为鄙人用的ubuntu,所以我的代码路径会有所不同.直接贴出原博文代码.故事的开始是这样的...*/ 1.关于Java实现将一张图片转成字符画(原文地址:http://blog.csdn.net/zhouli_05/article/details/7913263) 怎么样用Java实现将一张图片转成字符画?? 输入:

Java图像灰度化的实现过程解析

概要 本文主要介绍了灰度化的几种方法,以及如何使用Java实现灰度化.同时分析了网上一种常见却并不妥当的Java灰度化实现,以及证明了opencv的灰度化是使用“加权灰度化”法 24位彩色图与8位灰度图 首先要先介绍一下24位彩色图像,在一个24位彩色图像中,每个像素由三个字节表示,通常表示为RGB.通常,许多24位彩色图像存储为32位图像,每个像素多余的字节存储为一个alpha值,表现有特殊影响的信息[1]. 在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值

图像灰度化公式 颜色空间用途说明

图像的零碎基本知识点记录如下,一贯的习惯还是喜欢手写体,记录一些小知识点,今天就来贴图的形式与大家分享. 1.图像灰度化公式及增强,灰度化时可以用cvtColor函数,如若用公式方法,则一般标准为RGB各分量占比为0.3,,059 ,0.11. 2. 各颜色空间的性质及用途: