使用OpenCV在灰度图像中绘制一个彩色矩形

5
使用OpenCV在灰度图像中绘制彩色矩形是否可能?我尝试了几种方法,但要么整个图像变成了灰度,要么是RGB。

绘制灰度矩形怎么样?能否绘制单通道颜色的矩形或其他几何形状? - SomethingSomething
2个回答

9
您不能拥有混合的灰度和彩色图像。您可以查看Is there a way to have both grayscale and rgb pixels on the same image opencv C++?。因此,您无法在灰度CV_8UC1图像上绘制彩色矩形。但是您可以在显示灰度图像的CV_8UC3图像上绘制它。您可以使用cvtColor(..., ..., COLOR_GRAY2BGR)创建一个CV_8UC3灰色图像,然后在其上绘制彩色矩形,例如: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;
}

非常感谢 @miki,这对我很有帮助。但是同样的方法对于IplImage格式不起作用,而Mat格式可以 :( - Chaitanya Krish
1
不要使用iplimages。它们是过时的C语法,不应再使用。 - Miki

1

我有疑问。灰度图像会以每个像素一个通道的形式存储。

您需要做的是将图像转换为彩色(使用红=绿=蓝=灰度值)。然后您可以在灰色背景中绘制任何颜色。但是当然整个图像就变成了彩色图像,很少有支持只有小面积颜色的灰度图像的情况。


谢谢你的见解,@Malcolm。 - Chaitanya Krish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接