opencv 摄像头 圆点标定板 findCirclesGrid 使用

版权声明:本文为博主的文章,未经博主禁止可以随意转载。 https://blog.csdn.net/ONE_SIX_MIX/article/details/84073711

一个小记录,怎么使用圆点标定板对相机进行标定。
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)

猜你喜欢

转载自blog.csdn.net/ONE_SIX_MIX/article/details/84073711