https://blog.csdn.net/fly_wt/article/details/86432886
RGB转换成灰度图像的一个常用公式是:
Gray = R*0.299 + G*0.587 + B*0.114
//灰度转换函数*******
//第一个参数image输入的彩色RGB图像的引用;
//第二个参数imageGray是转换后输出的灰度图像的引用;
//*******************************************************
#include <opencv2opencv.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]); } } }