c++如何获取轮廓的最小外接矩形并绘制出来?用opencv回复
时间: 2023-12-10 20:39:56 浏览: 100
在 OpenCV 中,可以使用 `cv::findContours()` 函数来获取轮廓,并使用 `cv::minAreaRect()` 函数来计算最小外接矩形。最后,使用 `cv::drawContours()` 或 `cv::rectangle()` 函数将最小外接矩形绘制出来。
以下是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::imread("example.jpg");
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
cv::threshold(gray, gray, 128, 255, cv::THRESH_BINARY);
std::vector<std::vector<cv::Point>> contours;
cv::findContours(gray, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
cv::Mat result;
cv::cvtColor(gray, result, cv::COLOR_GRAY2BGR);
for (size_t i = 0; i < contours.size(); ++i)
{
cv::RotatedRect rect = cv::minAreaRect(contours[i]);
cv::Point2f pts[4];
rect.points(pts);
for (int j = 0; j < 4; ++j)
{
cv::line(result, pts[j], pts[(j + 1) % 4], cv::Scalar(0, 0, 255), 2);
}
}
cv::imshow("result", result);
cv::waitKey(0);
return 0;
}
```
在这个示例中,我们首先将图像转换为灰度图像,并进行二值化处理。然后使用 `cv::findContours()` 函数获取轮廓,并使用 `cv::minAreaRect()` 函数计算最小外接矩形。最后,我们使用 `cv::line()` 函数将最小外接矩形绘制在图像上。
注意:为了绘制旋转矩形,我们需要使用 `cv::RotatedRect` 类型来表示最小外接矩形,并使用 `cv::RotatedRect::points()` 函数获取矩形的四个顶点。
阅读全文