opencv 怎样在一个不规则多边形roi区域查找轮廓并计算面积,用c++
时间: 2024-02-10 17:10:24 浏览: 143
要在一个不规则多边形的 ROI 区域查找轮廓并计算面积,你可以使用 `cv::contourArea()` 函数来计算轮廓的面积。下面是一个使用 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);
// 计算轮廓的面积
double contour_area = cv::contourArea(contours[0]);
// 在原图中绘制轮廓
cv::drawContours(img, contours, -1, cv::Scalar(0, 0, 255), 2);
// 在图像上显示面积
cv::putText(img, "Contour area: " + std::to_string(contour_area), cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(0, 0, 255), 2);
// 显示结果图像
cv::imshow("Result", img);
cv::waitKey(0);
```
在这个示例中,我们首先定义了一个三角形多边形的顶点坐标,然后创建了一个与原图像大小相同的掩膜,并在掩膜中绘制了该多边形。然后使用 `findContours()` 函数查找轮廓,并计算轮廓的面积。最后在原图像中绘制出轮廓并在图像上显示面积。
阅读全文