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

Cha*_*ish 2 opencv

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

Mik*_*iki 6

您不能拥有混合的灰色和彩色图像.你可以看看有没有办法在同一个图像opencv C++上同时拥有灰度和rgb像素?.

因此,您无法在灰度CV_8UC1图像上绘制彩色矩形.但您可以在CV_8UC3显示灰色图像的图像上绘制它.

你可以创建一个CV_8UC3 灰色图像cvtColor(..., ..., COLOR_GRAY2BGR),然后你可以在上面绘制彩色矩形,例如:

在此输入图像描述

但请注意,此图像不再是类型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;
}
Run Code Online (Sandbox Code Playgroud)


Mal*_*ean 1

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