python获取棋盘格的外角点坐标
时间: 2023-08-09 16:06:03 浏览: 170
你可以使用OpenCV库中的函数来获取棋盘格的外角点坐标。具体步骤如下:
1. 使用cv2.findChessboardCorners()函数检测棋盘格内角点的位置。
2. 使用cv2.cornerSubPix()函数对内角点进行亚像素级别的精细定位。
3. 使用cv2.drawChessboardCorners()函数在棋盘格上绘制内角点。
4. 使用cv2.findHomography()函数计算棋盘格内角点到外角点的变换矩阵。
5. 使用cv2.perspectiveTransform()函数将内角点坐标转换为外角点坐标。
下面是一个示例代码:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('chessboard.jpg')
# 定义棋盘格的大小
board_size = (9, 6)
# 检测棋盘格内角点的位置
ret, corners = cv2.findChessboardCorners(img, board_size, None)
# 对内角点进行亚像素级别的精细定位
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
corners = cv2.cornerSubPix(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), corners, (11, 11), (-1, -1), criteria)
# 在棋盘格上绘制内角点
cv2.drawChessboardCorners(img, board_size, corners, ret)
# 计算棋盘格内角点到外角点的变换矩阵
pts1 = np.array([corners[0], corners[board_size[0]-1], corners[-board_size[0]], corners[-1]], np.float32)
pts2 = np.array([(0, 0), (board_size[0]-1, 0), (0, board_size[1]-1), (board_size[0]-1, board_size[1]-1)], np.float32)
M, _ = cv2.findHomography(pts1, pts2)
# 将内角点坐标转换为外角点坐标
corners_homog = np.concatenate([corners, np.ones((corners.shape[0], 1))], axis=1)
corners_trans = np.dot(M, corners_homog.T).T
corners_trans = corners_trans[:, :2] / corners_trans[:, 2, np.newaxis]
# 输出外角点坐标
print(corners_trans)
```
其中,'chessboard.jpg'是棋盘格图片的路径,board_size是棋盘格内角点的行列数,pts1和pts2分别是内角点和外角点的坐标。最后输出的corners_trans就是棋盘格外角点的坐标。
阅读全文