是否可以使用opencv在灰度图像中绘制彩色矩形。 我尝试了几种方法,但整个图像都会变成灰度或RGB。
答案 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)
灰色图像,然后可以在其上绘制彩色矩形,例如:
请注意,此图片的类型不再是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)
我对此表示怀疑。灰度图像将在内部存储为每个像素一个通道。 你必须做的是将图像转换为颜色(使用红色=绿色=蓝色=灰色值)。然后你可以在灰色背景中绘制任何颜色。但是当然整个图像变成了彩色图像,它不太可能支持具有小区域颜色的灰度图像。