2016-03-03 188 views

回答

0

我對此表示懷疑。灰度圖像將在內部存儲爲每像素一個通道。 你必須做的是將圖像轉換爲彩色(使用紅色=綠色=藍色=灰色值)。然後你可以在灰色背景中繪製任何顏色。但是,當然,整個圖像會變成彩色圖像,很難支持具有小面積顏色的灰度圖像。

+0

感謝您的洞察@Malcolm –

3

您不能有混合的灰色和彩色圖像。你可以看看Is there a way to have both grayscale and rgb pixels on the same image opencv C++?

因此,您無法在灰度CV_8UC1圖片上繪製彩色矩形。但是,您可以在顯示灰色圖像的CV_8UC3圖像上繪製它。

您可以創建一個CV_8UC3灰色圖像與cvtColor(..., ..., COLOR_GRAY2BGR),然後你可以在上面畫出你的顏色的矩形,如:

enter image description here

注意這個形象,但是,沒有更多的類型CV_8UC1,而是CV_8UC3

#include <opencv2/opencv.hpp> 
using namespace cv; 

int main() 
{ 
    Mat1b gray = imread("path_to_image", IMREAD_GRAYSCALE); 

    // Convert gray image to BGR 
    Mat3b grayBGR; 
    cvtColor(gray, grayBGR, COLOR_GRAY2BGR); 

    // Draw the colored rectangle 
    rectangle(grayBGR, Rect(10, 10, 100, 200), Scalar(0,255,0), 2); 

    imshow("Image with Rect", grayBGR); 
    waitKey(); 

    return 0; 
} 
+0

感謝ton @miki爲我工作。但是這同樣對IplImage不起作用,因爲它對於Mat格式:( –

+0

)不要使用iplimages,它們是過時的C語法,不應該再使用。 – Miki

相關問題