opencv c++获取轮廓的最小外接矩形
时间: 2023-11-21 19:53:02 浏览: 183
在OpenCV C++中,可以使用minAreaRect函数获取轮廓的最小外接矩形。该函数的参数是一个轮廓,返回一个RotatedRect类型的对象,表示该轮廓的最小外接矩形。可以通过调用RotatedRect对象的points函数获取该矩形的四个顶点,然后使用line函数绘制出矩形的每条边。另外,boundingRect函数可以获取轮廓的外接矩形,rectangle函数可以绘制出该矩形。如果需要绘制最小外接圆,可以使用minEnclosingCircle函数。
相关问题
c++如何使用opencv获取轮廓的最小外接矩形
使用OpenCV获取轮廓的最小外接矩形可以使用`cv::minAreaRect()`函数。该函数可以对给定的轮廓进行最小外接矩形的计算,并返回一个`RotatedRect`类型的矩形对象,其中包含了最小外接矩形的位置、大小和旋转角度信息。以下是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
int main()
{
// 读取图片
cv::Mat img = cv::imread("test.jpg");
// 转换为灰度图像
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
// 进行阈值处理
cv::Mat thresh;
cv::threshold(gray, thresh, 127, 255, cv::THRESH_BINARY);
// 查找轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(thresh, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 绘制轮廓和最小外接矩形
cv::Mat result = img.clone();
for (const auto& contour : contours) {
cv::RotatedRect rect = cv::minAreaRect(contour);
cv::Point2f pts[4];
rect.points(pts);
for (int i = 0; i < 4; ++i) {
cv::line(result, pts[i], pts[(i + 1) % 4], cv::Scalar(0, 0, 255), 2);
}
}
// 显示结果
cv::imshow("result", result);
cv::waitKey(0);
return 0;
}
```
上述代码中,我们首先读取一张图片,并将其转换为灰度图像。然后对灰度图像进行阈值处理,找到轮廓后,使用`cv::minAreaRect()`函数计算轮廓的最小外接矩形,并使用`cv::line()`函数绘制矩形的四条边。最后,将结果图像显示出来。
c++版opencv如何调用轮廓的最小外接矩形1
在C++版OpenCV中,可以使用`cv::minAreaRect()`函数来计算轮廓的最小外接矩形。以下是一个简单的代码示例:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像并转换为灰度
Mat img = imread("image.jpg");
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
// 进行边缘检测
Mat edges;
Canny(gray, edges, 50, 150);
// 查找轮廓
std::vector<std::vector<Point>> contours;
findContours(edges, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 绘制轮廓和最小外接矩形
Mat result = img.clone();
for (size_t i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(0, 0, 255);
drawContours(result, contours, i, color, 2);
RotatedRect rect = minAreaRect(contours[i]);
Point2f vertices[4];
rect.points(vertices);
for (int j = 0; j < 4; j++)
line(result, vertices[j], vertices[(j + 1) % 4], color, 2);
}
// 显示结果
imshow("result", result);
waitKey(0);
return 0;
}
```
在这个示例中,我们首先读取一张图像并将其转换为灰度。然后使用Canny算法进行边缘检测,并查找轮廓。使用`cv::minAreaRect()`函数计算每个轮廓的最小外接矩形,并将其绘制在原始图像上。最后,显示结果。
需要注意的是,`cv::minAreaRect()`函数返回的是一个旋转矩形(`RotatedRect`),它包含了最小外接矩形的位置、大小和旋转角度等信息。我们可以使用`RotatedRect::points()`函数将其转换为四个顶点坐标,并使用`cv::line()`函数将这些点连接起来绘制出最小外接矩形。
阅读全文