这样输出的imgdraw是纯黑色的,是错误的
时间: 2024-03-15 19:46:04 浏览: 74
非常抱歉,我的回答有误。在上一个回答中,我假设二值化后的图像中包含了轮廓信息,这是不正确的。实际上,在二值化过程中,除了背景和目标之外,所有像素的值都被设置为 0 或 255,因此无法从二值化图像中提取轮廓。
要绘制红色边框,你需要在灰度图像上绘制轮廓,并将颜色设置为红色。修改代码如下:
```c++
Mat imgthreshold;
Mat imgsrc = cv::imread("C:/Users/Dell/Pictures/Camera Roll/Yelan.jpg",0);
imshow("imgsrc", imgsrc);
threshold(imgsrc, imgthreshold,50, 110, THRESH_BINARY);
imshow("imgthreshold", imgthreshold);
vector<vector<Point>> contours;
findContours(imgthreshold, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
cv::Mat imgdraw = Mat::zeros(imgsrc.size(), CV_8UC3); // 创建一个三通道图像
drawContours(imgdraw, contours, -1, Scalar(0, 0, 255), 1); // 将颜色设置为红色
imshow("imgdraw", imgdraw);
waitKey(0);
```
这里,我们创建了一个三通道图像 imgdraw,然后在其中绘制轮廓并将颜色设置为红色。请注意,绘制轮廓时,我们使用了原始灰度图像的大小来创建 imgdraw,这样可以确保绘制出来的边框与原始图像具有相同的大小。
阅读全文