圖像灰度化的常用三種方式及其實現

第一次寫blog,還請各位同仁多多指正,萬分感謝!

圖像灰度化的常用三種方法有:

1.分量法(本文以B通道爲例):將彩×××像的R、G、B三分量的亮度之一作爲灰度圖像灰度值 Gray=B or Gray=G or Gray=R

2.最大值法:將彩×××像的R、G、B三分量亮度最大值作爲灰度圖像灰度值
max(R,max(G,B)) 注意max函數一次只能比較兩個參數;

3.加權平均法:將彩×××像的R、G、B三分量以不同的權重進行加權平均。人眼對綠色敏感最高,對藍色敏感最低,故採用心理學灰度公式:
Gray= 0.114B+ 0.587G+ 0.299R
即是Opencv的顏色空間轉換函數 : CV_BGR2GRAY

以下是示例代碼實現:
void cvtCOLOR(Mat src, Mat dst)
{
float R, G, B;
for (int y = 0; y < src.rows; y++)
{
uchar data = dst.ptr<uchar>(y);
for (int x = 0; x < src.cols; x++)
{
B = src.at<Vec3b>(y, x)[0];
G = src.at<Vec3b>(y, x)[1];
R = src.at<Vec3b>(y, x)[2];
//data[x] = (int)(R
0.299 + G 0.587 + B 0.114);//利用公式計算灰度值(加權平均法)
data[x] = (int)max(R,max(G,B));//最大值法
data[x] = (int)(B);//分量法
}
}
}
void main()
{
Mat src = imread("1.jpg", 1);
Mat dst(src.rows, src.cols, CV_8UC1);//大小與原圖相同的八位單通道圖
//cvtColor(src, dst, COLOR_RGB2GRAY);//加權平均法,心理學灰度公式
cvtCOLOR(src, dst);
namedWindow("轉換爲灰度圖", WINDOW_NORMAL);
imshow("轉換爲灰度圖", dst);
waitKey(0);

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章