一个小记录,怎么使用圆点标定板对相机进行标定。
opencv api手册页面
https://docs.opencv.org/master/d9/d0c/group__calib3d.html#ga7f02cd21c8352142890190227628fa80
参考了
http://answers.opencv.org/question/3471/findcirclesgrid-not-working/
不过测试后,标定结果貌似不怎么好
SimpleBlob 看起来可以调节很多参数,应该需要仔细设定
opencv 圆点标定板图像 路径是
opencv安装目录\sources\doc\acircles_pattern.png
import cv2
w = 4
h = 11
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
def find_corners(img):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
params = cv2.SimpleBlobDetector_Params()
params.maxArea = 10e4
params.minArea = 10
params.minDistBetweenBlobs = 5
blobDetector = cv2.SimpleBlobDetector_create(params)
ret, corners = cv2.findCirclesGrid(gray, (w, h), cv2.CALIB_CB_ASYMMETRIC_GRID, blobDetector, None)
if ret:
cv2.cornerSubPix(gray, corners, (w, h), (-1, -1), criteria)
return corners
return None
cam = cv2.VideoCapture(0)
if not cam.isOpened():
print('open cam failure')
exit(0)
while True:
ret, img = cam.read()
if ret:
cv2.imshow('viewer', img)
key = cv2.waitKey(1000 // 60) & 0xff
if key == ord(' '):
corners = find_corners(img)
# 将角点在图像上显示
cv2.drawChessboardCorners(img, (w, h), corners, corners is not None)
cv2.imshow('findCorners', img)