RGB轉換成灰度影象
阿新 • • 發佈:2019-01-13
RGB轉換成灰度影象的一個常用公式是:
Gray = R*0.299 + G*0.587 + B*0.114
//******************灰度轉換函式*************************
//第一個引數image輸入的彩色RGB影象的引用;
//第二個引數imageGray是轉換後輸出的灰度影象的引用;
//*******************************************************
#include <opencv2\opencv.hpp> using namespace cv; void ConvertRGB2GRAY(const Mat &image, Mat &imageGray); int main() { Mat src = imread("catGuitar.jpg"); Mat grayImage; ConvertRGB2GRAY(src, grayImage); imshow("gray image", grayImage); imwrite("grayimage.jpg", grayImage); waitKey(0); return 0; } void ConvertRGB2GRAY(const Mat &image, Mat &imageGray) { if (!image.data || image.channels() != 3) { return; } //建立一張單通道的灰度影象 imageGray = Mat::zeros(image.size(), CV_8UC1); //取出儲存影象畫素的陣列的指標 uchar *pointImage = image.data; uchar *pointImageGray = imageGray.data; //取出影象每行所佔的位元組數 size_t stepImage = image.step; size_t stepImageGray = imageGray.step; for (int i = 0; i < imageGray.rows; i++) { for (int j = 0; j < imageGray.cols; j++) { pointImageGray[i*stepImageGray + j] = (uchar)(0.114*pointImage[i*stepImage + 3 * j] + 0.587*pointImage[i*stepImage + 3 * j + 1] + 0.299*pointImage[i*stepImage + 3 * j + 2]); } } }
測試圖:
效果圖: