簡體   English   中英

在OpenCV中將灰度圖像轉換為單色

[英]Convert grayscale image to single color in OpenCV

我想知道是否有一種方法可以將灰度圖像轉換為彩色圖像? 就像我有灰度圖像,而是想將其轉換為藍色陰影一樣? 在OpenCV中有可能嗎?

非常感謝你!

灰度圖像通常只是一維。 通常,如果我想將灰度圖像傳遞到接受RGB(3維)的函數中,該怎么做,我將矩陣復制3次以創建MxNx3矩陣。 如果只希望使用“藍色”通道,則只需在第一維和第二維上合並零的MxN,而將原始灰度值放入第三維。

根據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
        }

但是,由於存在兩個循環,因此需要更長的時間!

為此,您基本上只需要遍歷灰度圖像中的所有像素並將值映射到顏色范圍即可。 這是偽代碼:

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

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM