c++ opencv 求连通域的最小外接矩形和外接矩形
时间: 2023-09-10 22:09:17 浏览: 209
你可以使用 OpenCV 库来求解图像的连通域最小外接矩形和外接矩形。以下是一个基本的示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
// 读取图像
cv::Mat image = cv::imread("input_image.png", cv::IMREAD_GRAYSCALE);
// 二值化图像
cv::Mat binary;
cv::threshold(image, binary, 0, 255, cv::THRESH_BINARY);
// 寻找连通域
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 遍历每个连通域
for (const auto& contour : contours) {
// 求解最小外接矩形
cv::RotatedRect boundingBox = cv::minAreaRect(contour);
// 绘制外接矩形
cv::Point2f vertices[4];
boundingBox.points(vertices);
for (int i = 0; i < 4; ++i) {
cv::line(image, vertices[i], vertices[(i + 1) % 4], cv::Scalar(0, 255, 0), 2);
}
}
// 显示结果
cv::imshow("Result", image);
cv::waitKey(0);
return 0;
}
```
这段代码使用了 `cv::findContours` 函数找到图像中的连通域,并利用 `cv::minAreaRect` 函数求解每个连通域的最小外接矩形。然后,利用 `cv::line` 函数绘制外接矩形。
请确保在编译和运行代码之前,已经正确安装了 OpenCV 库,并将图像文件命名为 "input_image.png" 或者根据需要进行相应调整。
阅读全文