如何使用c++和opencv识别图中矩形
时间: 2024-05-11 21:17:33 浏览: 127
您好,关于使用 C 和 OpenCV 识别图中矩形的问题,您可以参考以下步骤:
1. 读入图像
2. 将图像进行灰度化和二值化处理
3. 使用 OpenCV 提供的 findContours 函数找到图中所有的轮廓
4. 遍历所有的轮廓,使用 approxPolyDP 函数进行多边形拟合,这里选择拟合矩形
5. 对拟合出的矩形进行过滤,选出符合条件的矩形
具体实现可参考以下代码:
```c++
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("test.jpg", 0);
imshow("src img", img);
threshold(img, img, 0, 255, THRESH_OTSU);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(img, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
Mat img_result = img.clone();
for (size_t i = 0; i < contours.size(); i++)
{
approxPolyDP(Mat(contours[i]), contours[i], arcLength(Mat(contours[i]), true) * 0.04, true);
if (contours[i].size() == 4 && hierarchy[i][3] == -1)
{
Rect rect = boundingRect(contours[i]);
float ratio = (float)rect.width / rect.height;
if (ratio > 0.8 && ratio < 1.2)
{
rectangle(img_result, rect, Scalar(255, 0, 0), 2);
}
}
}
imshow("result img", img_result);
waitKey(0);
return 0;
}
```
希望能对您有所帮助。如果有其他问题,欢迎继续提问。
阅读全文