不知道棋盘格大小的情况下使用cv2.findChessboardCorners
时间: 2023-07-14 16:12:05 浏览: 155
立体视觉OpenCV
3星 · 编辑精心推荐
如果你不知道棋盘格的大小,可以尝试使用cv2.findChessboardCorners函数的自适应模式。这个模式会在不知道棋盘格大小的情况下尝试找到所有可能的棋盘格,并返回一个矩阵,其中每一行包含棋盘格的所有角点的坐标。你可以使用这些坐标来计算棋盘格的大小,然后再使用cv2.findChessboardCorners函数的固定模式来获取更精确的结果。
以下是一个使用自适应模式的示例代码:
```
import cv2
# 读取图片
img = cv2.imread('chessboard.jpg')
# 转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 设置自适应模式的参数
flags = cv2.CALIB_CB_ADAPTIVE_THRESH + cv2.CALIB_CB_FAST_CHECK + cv2.CALIB_CB_NORMALIZE_IMAGE
# 查找棋盘格的角点
corners = cv2.findChessboardCorners(gray, (10, 7), flags=flags)
# 如果找到了棋盘格
if corners is not None:
# 绘制角点
cv2.drawChessboardCorners(img, (10, 7), corners, True)
# 显示图片
cv2.imshow('Chessboard', img)
cv2.waitKey(0)
else:
print('Unable to find chessboard corners.')
```
在这个例子中,我们使用了一个 10x7 的棋盘格,但是我们并不知道棋盘格的大小。我们将flags参数设置为cv2.CALIB_CB_ADAPTIVE_THRESH + cv2.CALIB_CB_FAST_CHECK + cv2.CALIB_CB_NORMALIZE_IMAGE,这会告诉cv2.findChessboardCorners函数自适应地查找棋盘格的角点。如果找到了角点,我们会使用cv2.drawChessboardCorners函数将其绘制到图片上。如果未能找到角点,我们会输出一条错误信息。
阅读全文