使用opencv在灰度图像中绘制彩色矩形

时间:2016-03-03 18:25:21

标签: opencv

是否可以使用opencv在灰度图像中绘制彩色矩形。 我尝试了几种方法,但整个图像都会变成灰度或RGB。

2 个答案:

答案 0 :(得分:6)

您不能拥有混合的灰色和彩色图像。你可以看一下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;
}

答案 1 :(得分:0)

我对此表示怀疑。灰度图像将在内部存储为每个像素一个通道。 你必须做的是将图像转换为颜色(使用红色=绿色=蓝色=灰色值)。然后你可以在灰色背景中绘制任何颜色。但是当然整个图像变成了彩色图像,它不太可能支持具有小区域颜色的灰度图像。