1. 程式人生 > >RGB轉換成灰度影象

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

測試圖:
在這裡插入圖片描述
效果圖:
在這裡插入圖片描述