码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-07-09 17:56:34      阅读:461      评论:0      收藏:0      [点我收藏+]

标签:

对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 }

 

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

标签:

原文地址:http://www.cnblogs.com/theBoyisNone/p/5656209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!