用drawContours函数时如何将区域变为红色
时间: 2024-03-13 19:44:40 浏览: 66
如果要将轮廓内部的区域填充为红色,可以在调用 `drawContours` 函数之前,使用 `fillPoly` 函数对轮廓内部进行填充。具体代码如下:
```
cv::Mat imgthreshold;
cv::Mat imgsrc = cv::imread("C:/Users/Dell/Pictures/Camera Roll/L10-10-R.png", 0);
cv::threshold(imgsrc, imgthreshold, 100, 255, THRESH_BINARY);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(imgthreshold, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 填充区域为红色
cv::Mat mask(imgsrc.size(), CV_8UC1, cv::Scalar::all(0));
cv::fillPoly(mask, contours, cv::Scalar::all(255));
cv::Mat img_with_fill;
imgsrc.copyTo(img_with_fill, mask);
// 绘制轮廓为红色
cv::drawContours(img_with_fill, contours, -1, cv::Scalar(0, 0, 255), 2);
cv::imshow("nihao", img_with_fill);
cv::waitKey(0);
```
其中,`fillPoly` 函数用于填充多边形区域,第一个参数是填充的目标图像,第二个参数是多边形顶点的集合,第三个参数是填充的颜色。这里我们将填充颜色设置为白色,即 `Scalar::all(255)`。然后将填充后的图像与原图像进行按位与操作,产生的结果就是轮廓内部被填充为白色的图像。最后,我们使用 `drawContours` 函数对轮廓进行绘制,将颜色设置为红色,即 `Scalar(0, 0, 255)`。
阅读全文