[英]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.