Are there any OpenCV camera calibration methods where the target can be larger than the current camera's FoV?
In particular, I use cv2.findChessboardCornersSB
with the Radon Checkerboard ( openCV calib pattern ). I thought it uses the three points in center of the board to determining the board's center. So you the center has to be in the image and not all squares. Therefore we have patterns at the edge of the image resulting in a better distortion model at the boundaries.
Please, tell me if I am right, or if that should not work at all, because I get the checkerboard corner if the full calibration target is in the image, but no corner detection the only the three points are in the image.
Edit: I use the function find corners as follows:\
img = cv2.imread(path)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCornersSB(gray, (3,3), cv2.CALIB_CB_LARGER + cv2.CALIB_CB_MARKER)
Not full pattern - doesn't work
Thanks
Try adding CALIB_CB_LARGER
and CALIB_CB_MARKER
to flags when calling findChessboardCornersSB()
.
According to the doc , CALIB_CB_MARKER
means that the pattern must have a marker, and makes calibration more accurate. CALIB_CB_LARGER
means the detected pattern is allowed to be larger than patternSize
.
Then, you can set the parameter patternSize
to the minimum visible size, like 5x6, even if the true size is 10x10 or larger. The pattern will be detected if the marker and 5x6 corners are visible, while corners exceeding the 5x6 zone will also be detected.
As an alternative solution, you can have a look at ChArUco Boards .
Edit: I tested with your image, flags
set to CALIB_CB_MARKER|CALIB_CB_LARGER
, patternSize
set to 3x3, color inverted , then 78 corners are detected: It seems that the color of marker is the problem.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.