opencv找到轮廓后得到的若干结果,用矩形框框出面积最大的一个,并显示矩形的宽和高和中心点坐标,用C++实现
时间: 2023-06-15 13:07:37 浏览: 143
OpenCV实现创建包围轮廓的矩形和圆形边界框(C++实现).zip
可以照以下步骤实现:
1. 使用 OpenCV 的 findContours 函数找到所有轮廓并存储在一个 vector 中。
2. 遍历 vector 中的所有轮廓,计算每个轮廓的面积。
3. 找到面积最大的轮廓,并使用 boundingRect 函数计算该轮廓的矩形框。
4. 显示矩形框的宽和高和中心点坐标。
以下是示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat image = imread("test.jpg", IMREAD_GRAYSCALE);
if (image.empty())
{
cout << "Could not read the image: " << endl;
return 1;
}
// Find contours
vector<vector<Point>> contours;
findContours(image, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// Find contour with maximum area
int maxArea = 0;
int maxIndex = 0;
for (int i = 0; i < contours.size(); i++)
{
int area = contourArea(contours[i]);
if (area > maxArea)
{
maxArea = area;
maxIndex = i;
}
}
// Draw bounding rectangle
Rect rect = boundingRect(contours[maxIndex]);
rectangle(image, rect, Scalar(255), 2);
// Display results
cout << "Width: " << rect.width << endl;
cout << "Height: " << rect.height << endl;
cout << "Center X: " << rect.x + rect.width / 2 << endl;
cout << "Center Y: " << rect.y + rect.height / 2 << endl;
imshow("Image", image);
waitKey();
return 0;
}
```
注意,上述代码仅处理了最大面积的轮廓。如果需要处理多个轮廓,可以在找到每个轮廓的面积后将其存储在一个 vector 中,然后对该 vector 进行排序,以便按面积大小顺序处理轮廓。
阅读全文