zha*_*hen 1 matlab opencv camera-calibration extrinsic-parameters corner-detection
我最近使用Matlab 单摄像机校准应用程序算法来校准相机内在函数和外在函数.在找到棋盘的角落时,很多时候detectCheckerboardPoints
Matlab的功能执行(准确性)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);
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
让棋盘更大!这可能发生,而且确实发生了.通常,您希望棋盘格成为大部分屏幕的一部分.你解决了两个问题: