opencv 怎样在一个不规则多边形roi区域查找轮廓,用c++
时间: 2024-02-09 14:13:36 浏览: 82
要在一个不规则多边形的 ROI 区域查找轮廓,你需要先定义多边形的顶点坐标,然后使用 `cv::fillPoly()` 函数创建一个掩膜,再使用该掩膜作为参数调用 `cv::findContours()` 函数。下面是一个使用 C++ 代码示例:
```cpp
// 读取图像
cv::Mat img = cv::imread("image.jpg");
// 定义多边形的顶点坐标
std::vector<std::vector<cv::Point>> vertices = { {cv::Point(100, 100), cv::Point(200, 100), cv::Point(150, 200)} };
// 创建一个掩膜,全黑色
cv::Mat mask = cv::Mat::zeros(img.size(), CV_8UC1);
// 在掩膜中绘制不规则多边形 ROI 区域,全白色
cv::fillPoly(mask, vertices, cv::Scalar(255));
// 查找轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(mask, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 在原图中绘制轮廓
cv::drawContours(img, contours, -1, cv::Scalar(0, 0, 255), 2);
// 显示结果图像
cv::imshow("Result", img);
cv::waitKey(0);
```
在这个示例中,我们首先定义了一个三角形多边形的顶点坐标,然后创建了一个与原图像大小相同的掩膜,并在掩膜中绘制了该多边形。然后使用 `findContours()` 函数查找轮廓,并在原图像中绘制出来。
阅读全文