opencv识别多边形,c++代码
时间: 2023-10-30 18:06:12 浏览: 106
以下是使用OpenCV识别多边形的C代码示例:
```
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <vector>
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("shapes.jpg", 0);
Mat dst = Mat::zeros(src.size(), CV_8UC3);
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours(src, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
vector<vector<Point> > contours_poly(contours.size());
vector<Rect> boundRect(contours.size());
for (int i = 0; i < contours.size(); i++)
{
approxPolyDP(Mat(contours[i]), contours_poly[i], 3, true);
boundRect[i] = boundingRect(Mat(contours_poly[i]));
}
for (int i = 0; i < contours.size(); i++)
{
Scalar color = Scalar(0, 255, 0);
drawContours(dst, contours_poly, i, color, 1, 8, vector<Vec4i>(), 0, Point());
rectangle(dst, boundRect[i].tl(), boundRect[i].br(), color, 2, 8, 0);
}
namedWindow("Contours", CV_WINDOW_AUTOSIZE);
imshow("Contours", dst);
waitKey(0);
return 0;
}
```
在此示例中,我们首先读取名为“shapes.jpg”的图像并将其转换为灰度。然后,我们使用findContours函数查找图像中的所有轮廓。接下来,我们使用approxPolyDP函数对每个轮廓进行多边形逼近,并使用boundingRect函数计算其边界框。最后,我们将多边形和边界框绘制到输出图像中,并将其显示在窗口中。
请注意,此示例仅处理单个通道灰度图像。如果您要处理彩色图像,请使用split函数将其拆分为三个通道,并在处理每个通道时重复此过程。
阅读全文