生成一个使用findCirclesGrid函数提取网格中的所有圆心XY坐标的C++代码
时间: 2023-06-06 17:04:32 浏览: 89
以下是使用findCirclesGrid函数提取网格中的所有圆心XY坐标的C代码:
Mat image = imread("grid_image.png", IMREAD_GRAYSCALE);
Size patternSize(7, 7); // pattern size is 7x7
vector<Point2f> centers; // vector to hold circle centers
bool patternFound = findCirclesGrid(image, patternSize, centers, CALIB_CB_ASYMMETRIC_GRID);
if (patternFound)
{
// print out all circle center coordinates
for (int i = 0; i < centers.size(); i++)
{
printf("Circle %d: (%.2f, %.2f)\n", i+1, centers[i].x, centers[i].y);
}
}
else
{
printf("Pattern not found.\n");
}
相关问题
提取前后两个圆形靶标的圆心坐标,使用findCirclesGrid函数提取前一个靶标圆心的XY坐标后,纯色覆盖前靶标;再以相同的方式提取后一个靶标的圆心XY坐标。基于VS2010的C++程序
很好的问题!基于您提供的信息,您可以使用OpenCV库中的findCirclesGrid函数来提取两个圆形靶标的圆心坐标。下面是C++示例代码,您可以根据自己的需要进行修改和调整:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读入图片
Mat image = imread("test.jpg", IMREAD_COLOR);
// 定义圆形靶标的行数和列数
const int rows = 5;
const int cols = 4;
// 定义存储点坐标的向量
vector<Point2f> centers;
// 使用findCirclesGrid函数提取前一个靶标圆心的XY坐标
bool patternFound = findCirclesGrid(image, Size(cols, rows), centers, CALIB_CB_ASYMMETRIC_GRID);
// 纯色覆盖前靶标
Mat mask(image.size(), CV_8UC1, Scalar(0));
drawChessboardCorners(mask, Size(cols, rows), Mat(centers), patternFound);
bitwise_or(mask, image, image);
// 清空centers向量
centers.clear();
// 使用findCirclesGrid函数提取后一个靶标的圆心XY坐标
patternFound = findCirclesGrid(image, Size(cols, rows), centers, CALIB_CB_ASYMMETRIC_GRID);
// 纯色覆盖后靶标
mask.setTo(Scalar(0));
drawChessboardCorners(mask, Size(cols, rows), Mat(centers), patternFound);
bitwise_or(mask, image, image);
// 显示提取后的图片
imshow("Result", image);
waitKey(0);
return 0;
}
```
希望这个例子能够帮助您解决问题!
阅读全文