opencv识别方块并获取中心的C++程序
时间: 2024-06-11 08:04:22 浏览: 77
以下是使用OpenCV识别方块并获取中心的C++程序示例:
```
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat image = imread("square.jpg", IMREAD_GRAYSCALE); // 读取灰度图像
if (image.empty()) // 图像读取失败
{
cerr << "Failed to open image file!" << endl;
return -1;
}
// 高斯滤波,降噪
GaussianBlur(image, image, Size(5, 5), 0);
// Canny边缘检测
Mat edges;
Canny(image, edges, 100, 200);
// 寻找轮廓
vector<vector<Point>> contours;
findContours(edges, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 找到最大的正方形轮廓
double max_area = 0;
vector<Point> max_contour;
for (auto& contour : contours)
{
double area = contourArea(contour);
if (area > max_area)
{
max_area = area;
max_contour = contour;
}
}
// 计算正方形中心坐标
Moments moments = moments(max_contour);
Point center(moments.m10 / moments.m00, moments.m01 / moments.m00);
// 在图像中绘制正方形轮廓和中心点
drawContours(image, vector<vector<Point>>{max_contour}, 0, Scalar(255), 1);
circle(image, center, 5, Scalar(255), -1);
// 显示图像
namedWindow("Square Detection", WINDOW_NORMAL);
imshow("Square Detection", image);
waitKey(0);
return 0;
}
```
在此示例中,我们首先读取灰度图像,然后进行高斯滤波和Canny边缘检测,以便找到轮廓。接下来,我们使用`findContours`函数查找轮廓,并找到面积最大的正方形轮廓。最后,我们使用`Moments`类计算正方形的中心坐标,并在图像中绘制轮廓和中心点。
阅读全文