本人水平有限,从最简单的图像处理算法写起,希望能和大家共同提高。
这一章主要写灰度图的相关知识。
参考百度百科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; } }
只是把上面的那句话替换掉。
系统方法 | 乘法 | 移位 |