OpenCV 学习笔记(9)RGB转换成灰度图像的一个常用公式Gray = R*0.299 + G*0.587 + B*0.114

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]);
		}
	}
}

  

原文地址:https://www.cnblogs.com/kekeoutlook/p/11114966.html