RGB转换成灰度图像的一个常用公式Gray = R*0.299 + G*0.587 + B*0.114

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

测试图:

效果图:

全部评论

相关推荐

10-11 15:42
皖西学院 Java
青鱼LINK:我硕士,也是java0面试,吾道不孤
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务