本人水平有限,从最简单的图像处理算法写起,希望能和大家共同提高。
这一章主要写灰度图的相关知识。
一 灰度图定义
参考百度百科http://baike.baidu.com/view/1184366.htm
在计算机领域中,灰度(Gray scale)数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。在一些关于数字图像的文章中单色图像等同于灰度图像,在另外一些文章中又等同于黑白图像。
http://zh.wikipedia.org/wiki/%E7%81%B0%E5%BA%A6%E5%9B%BE%E5%83%8F
二 灰度的计算
既然我们知道了灰度图的定义,那么我们怎么计算灰度图呢?
首先,申请灰度图的空间,空间大小为 width * height * sizeof(char), 如果使用一个char来表示颜色的,即0-255.
out.create(input.cols,input.rows,CV_8UC1);
然后,通过上面的公式进行计算,代码部分如下:
公式一:Gray=R*0.3+G*0.59+B*0.11;
int i,j;
uchar* p;
uchar* q;
uchar R,G,B;
for( i = 0; i < nRows; ++i)
{
p = input.ptr<uchar>(i);
q = out.ptr<uchar>(i);
for ( j = 0; j < nCols; ++j)
{
B = p[j * nChannels];
G = p[j * nChannels + 1];
R = p[j * nChannels + 2];
q[j] = 0.299 * R + 0.587 * G + 0.114*B;
}
}
公式二: Gray =(R*76+G*151+B*28)>>8;
只是把上面的那句话替换掉。
三 效果和效率

系统方法 | 乘法 | 移位 |
![]() | ![]() | ![]() |