Opencv 使用findcirclesgrid()查找带有角度的不对称圆网格时,函数没有';行不通

Opencv 使用findcirclesgrid()查找带有角度的不对称圆网格时,函数没有';行不通,opencv,Opencv,分辨率为2592*1944,网格几乎填满了图像,然后问题就出现了。当板与镜头平行时,我可以找到网格,就像那样 当电路板带有角度时,该功能不起作用: 真诚地寻求帮助,谢谢 这是我的密码 SimpleBlobDetector::Params params; params.maxArea = 30000; params.minInertiaRatio = 0.05f; Ptr<FeatureDetector> blobDetector = new SimpleBlobDetector(

分辨率为
2592*1944
,网格几乎填满了图像,然后问题就出现了。当板与镜头平行时,我可以找到网格,就像那样

当电路板带有角度时,该功能不起作用:

真诚地寻求帮助,谢谢

这是我的密码

SimpleBlobDetector::Params params;
params.maxArea = 30000;
params.minInertiaRatio = 0.05f;
Ptr<FeatureDetector> blobDetector = new SimpleBlobDetector(params);
bool found = findCirclesGrid(circleimg, Size(cbCols, cbRows), corners, CALIB_CB_ASYMMETRIC_GRID, blobDetector);
SimpleBlobDetector::Params Params;
参数maxArea=30000;
参数minInertiaRatio=0.05f;
Ptr BLOBDECTOR=新的SimpleBlobDetector(参数);
bool found=findCirclesGrid(圆形、大小(cbCols、cbRows)、角、校准CB\u不对称网格、blobDetector);

把它写下来作为我的笔记,并分享我的经验

Mat circleimg = imread("circle.bmp");
SimpleBlobDetector::Params params;
params.maxArea = 30000;
params.minArea = 1000;
params.minThreshold = 10;
params.maxThreshold = 180;
params.thresholdStep = 5;
params.filterByCircularity = true;
params.minCircularity = 0.7;
params.filterByInertia = false;
params.filterByConvexity = false;
Ptr<FeatureDetector> blobDetector = new SimpleBlobDetector(params);

//this part can be used to test the if the blob detector work.
vector<KeyPoint> keypoints;
blobDetector->detect(circleimg, keypoints);
Mat circleimg_tmp = circleimg.clone();
for (size_t i = 0; i < keypoints.size(); i++)
{
    circle(circleimg_tmp, keypoints[i].pt, 25, Scalar(0, 0, 255), 3);
}
namedWindow("circleimg", cv::WINDOW_NORMAL);
imshow("circleimg", circleimg_tmp);
waitKey(0);

bool found = findCirclesGrid(circleimg, Size(cbCols, cbRows), corners, CALIB_CB_ASYMMETRIC_GRID | CALIB_CB_CLUSTERING, blobDetector);
drawChessboardCorners(circleimg, Size(cbCols, cbRows), corners, found);
imshow("circleimg", circleimg);
Mat circleimg=imread(“circle.bmp”);
SimpleBlobDetector::Params Params;
参数maxArea=30000;
参数minArea=1000;
params.minThreshold=10;
参数maxThreshold=180;
params.thresholdStep=5;
params.filterByCircularity=真;
参数最小圆度=0.7;
params.filterByInertia=false;
params.filterByConvexity=false;
Ptr BLOBDECTOR=新的SimpleBlobDetector(参数);
//该部件可用于测试水滴探测器是否工作。
矢量关键点;
blobDetector->detect(圆圈,关键点);
Mat circleimg_tmp=circleimg.clone();
对于(size_t i=0;i

我发现一个问题,当我不使用集群标志时,即使blobdetector查找圆,findcirclesgrid()函数也无法工作。

问题尚不清楚。。你可以发布一个最小的代码,让我自己试试吗?你试过玩参数了吗?谢谢你们的回复,我已经解决了这个问题。我调整了面积参数和圆度参数,然后在函数中使用聚类标志。