在OpenCV中将灰度图像转换为单色

Convert grayscale image to single color in OpenCV

本文关键字:转换 单色 灰度图像 OpenCV      更新时间:2023-10-16

我想知道是否有办法将灰度图像转换为一种彩色图像?就像我有一个灰度图像,我想将其转换为蓝色阴影?这在OpenCV中可能吗?

谢谢!

根据opencv社区的回答,您应该自己创建一个3通道图像。

   Mat empty_image = Mat::zeros(src.rows, src.cols, CV_8UC1);//initial empty layer
   Mat result_blue(src.rows, src.cols, CV_8UC3);                 //initial blue result
   Mat in1[] = { ***GRAYINPUT***, empty_image, empty_image };    //construct 3 layer Matrix
   int from_to1[] = { 0,0, 1,1, 2,2 };
   mixChannels( in1, 3, &result_blue, 1, from_to1, 3 );          //combine image

之后,您可以获得蓝色通道图像。通常,opencv 中彩色图像的蓝色通道是第一层(因为他们将 3 个通道作为 BGR(。

顺便说一句,如果要使用复制每个像素方法,则可以初始一个空图像

   Mat result_blue(src.rows, src.cols, CV_8UC3); //blue result
   for (int i =0; i<src.rows; i++)
        for (int j=0; j<src.cols; j++){
               Vec3b temp = result_blue.at<Vec3b>(Point(i,j));//get each pixel
               temp[0] = gray.at<uchar>(i,j);                 //give value to blue channel
               result_blue.at<Vec3b>(Point(x,y)) = temp;      //copy back to img
        }

但是,由于有两个循环,因此需要更长的时间!

灰度图像通常只是一个维度。通常,如果我想将灰度图像传递到接受RGB(三维(的函数中,我会复制矩阵3次以创建MxNx3矩阵。如果您只想使用蓝色通道,只需在第 1 维和第 2 维中连接零的 MxN,同时将原始灰度值放在第 3 维中。

要实现此目的,您基本上只需要遍历灰度图像中的所有像素并将值映射到颜色范围。这是伪代码:

grayImage:imageObject;
tintedImage:imageObject;
//Define your color tint here
myColorR:Int = 115;
myColorG:Int = 186;
myColorB:Int = 241;
for(int i=0; i<imagePixelArray.length; i++){
   float pixelBrightness = grayImage.getPixelValueAt(i)/255;
   int pixelColorR = myColorR*pixelBrightness;
   int pixelColorG = myColorG*pixelBrightness;
   int pixelColorB = myColorB*pixelBrightness;
   tintedImage.setPixelColorAt(i, pixelColorR, pixelColorG, pixelColorB);
}

希望对您有所帮助!