使用Python进行相机标定

0 投票
1 回答
2490 浏览
提问于 2025-04-17 21:17

我正在尝试使用棋盘格的方法来校准我的两个摄像头,但每次我运行OpenCV示例中提供的代码时,都会收到这个消息:

processing ../cpp\img1.jpg... chessboard not found
processing ../cpp\img2.jpg... chessboard not found
processing ../cpp\img3.jpg... chessboard not found
processing ../cpp\img4.jpg... chessboard not found
processing ../cpp\img5.jpg... chessboard not found

这是img1 https://i.stack.imgur.com/04b4U.jpg

好的,这段代码是OpenCV示例中的,下面是cv2.FindChessboard()的部分代码:

 for fn in img_names:
    print 'processing %s...' % fn,
    img = cv2.imread(fn, 0)
    h, w = img.shape[:2]
    found, corners = cv2.findChessboardCorners(img, pattern_size)
    if found:
        term = ( cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_COUNT, 30, 0.1 )
        cv2.cornerSubPix(img, corners, (5, 5), (-1, -1), term)
    if debug_dir:
        vis = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
        cv2.drawChessboardCorners(vis, pattern_size, corners, found)
        path, name, ext = splitfn(fn)
        cv2.imwrite('%s/%s_chess.bmp' % (debug_dir, name), vis)
    if not found:
        print 'chessboard not found'
        continue
    img_points.append(corners.reshape(-1, 2))
    obj_points.append(pattern_points)

    print 'ok'

1 个回答

1

假设你的代码没问题,可能是你的棋盘出了问题。可以看看关于函数 findChessboardCorners 的文档(链接),文档最后有一段说明:

这个函数需要棋盘周围有白色的边框(比如一圈厚厚的白边,越宽越好),这样可以让检测在不同环境下更稳定。如果没有边框,而且背景又很暗,外面的黑色方块就无法正确分辨,这样棋盘的分组和排序就会失败。

如果你看看在这个标定教程中提供的图片,你会发现棋盘周围有很多白色的空间,这一点非常重要

enter image description here

另外,可能是错觉,但似乎你的外部方块和其他方块的大小不一样,这也可能很重要。

撰写回答