https://blog.csdn.net/fly_wt/article/details/86432886
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]); } } }