我最近使用 Matlab Single Camera Calibration App算法来校准相机的内在和外在。在找到棋盘的角落时,Matlab 的功能多次detectCheckerboardPoints
执行(准确度)opencv api cv::findChessboardCorners
,但在某些图片上,Matlab 的行为很奇怪。
例如,在下图中,棋盘格之间的角清晰可见,而 matlab 在奇怪的地方发现多余的角:
matlab 代码片段很简单,如下所示:
img=imread(fn);
[imUndist, newOrig]=undistortImage(img, cameraParams);
[pxs, bdsize]=detectCheckerboardPoints(imUndist); %or detect on 'img' directly
imMarked=insertMarker(imUndist, pxs);
imshow(imMarked);
- 在这张图片上用(下面的代码)检测到的角
opencv
非常精确:
//opencv代码:
Mat img = imread(fpath);
int ww = 8, hh = 15;
cv::Size bsz(ww, hh);
vector<Point2f> ptvec;
bool found = cv::findChessboardCorners(img, bsz, ptvec, CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE);
cv::drawChessboardCorners(img, bsz, ptvec, found);
imshow("img", img);
waitKey();