RGB转换成灰度图像

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

测试图:
在这里插入图片描述
效果图:
在这里插入图片描述

猜你喜欢

转载自www.cnblogs.com/violetcvfly/p/10264048.html