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