提取前后两个圆形靶标的圆心坐标,使用findCirclesGrid函数提取前一个靶标圆心的XY坐标后,纯色覆盖前靶标;再以相同的方式提取后一个靶标的圆心XY坐标。基于VS2010的C++程序
时间: 2024-05-08 07:18:27 浏览: 159
基于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;
}
```
希望这个例子能够帮助您解决问题!
阅读全文