C++ 发现棋盘角不';t在opencv 4.1.2 c+中工作+;
我正在校准我的照相机。正如我所读到的,我需要做一些测试->findChessboard; 我有真正的国际象棋,我拍了它的照片(它是8x4),我设置了大小(8-1,4-1)->大小(7,3) Bot boards设置为32(4乘以8等于32(或者我应该写7*3->21))。当我想找到棋盘时,它说我错了 将会有这个棋盘的图片 我已经尝试了所有的方法来寻找这些棋盘角->我给它标记为CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_FILTER_QUADS或CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_FILTER_QUADS。它也不起作用。我试着给它一个彩色(非灰色)的图像,但效果不太好。我该怎么办 对我尝试的操作进行编码:C++ 发现棋盘角不';t在opencv 4.1.2 c+中工作+;,c++,opencv,camera,camera-calibration,chess,C++,Opencv,Camera,Camera Calibration,Chess,我正在校准我的照相机。正如我所读到的,我需要做一些测试->findChessboard; 我有真正的国际象棋,我拍了它的照片(它是8x4),我设置了大小(8-1,4-1)->大小(7,3) Bot boards设置为32(4乘以8等于32(或者我应该写7*3->21))。当我想找到棋盘时,它说我错了 将会有这个棋盘的图片 我已经尝试了所有的方法来寻找这些棋盘角->我给它标记为CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_FILTER_QUADS或CALIB_CB_AD
VideoCapture vc(0);
int numBoards=0;
int Numcornersor;
国际货币基金组织;
printf(“输入沿宽度的角数:”);
scanf(“%d”&numcornersor);
printf(“输入沿高度的角数:”);
scanf(“%d”&numCornersVer);
printf(“输入板数:”);
scanf(“%d”、&numBoards);
int numSquares=numcornersor*numCornersVer;
尺寸板_sz=尺寸(NumCornersor,numCornersVer);
向量对象_点;
矢量图像点;
矢量角点;
int=0;
Mat图像;
Mat灰度图像;
vc>>图像;
对于(int j=0;j>图像;
int key=waitKey(1);
如果(键==27)
返回0;
if(key=''&&found!=0)
{
图像点。向后推(角);
对象点。推回(obj);
printf(“快照存储!”);
成功++;
如果(成功>=numBoards)
打破
}
}
查看输入图像,我发现两个问题可能导致角点检测失败
首先,图像是一种黑暗的方式。提供一些漫反射照明。否则,即使要检测角点,传感器噪声也会非常高,以至于检测精度会非常差
第二,正如findChessboardCorners()中所述:
注意:该功能需要在电路板周围留出空白(如方形厚边框,越宽越好),以使检测在各种环境中更为稳健。否则,如果没有边界且背景为黑色,则外部黑色正方形无法正确分割,因此方形分组和排序算法失败
我建议打印出具有足够白边的高质量电路板图像,将其粘在坚固的平面上(如木板),并在光线充足的环境中进行校准。这样,它不仅应该检测角点,而且检测的准确性应该比您使用的设置要好得多
如果您需要有关高质量相机校准的其他提示,请查看。谢谢。但它也不起作用。对不起,我迟到了。[链接]()。我做到了。它的尺寸是6x9和54。