九点法做手眼标定的完整python代码
时间: 2023-07-10 19:05:56 浏览: 146
标定验证.rar_9点手眼标定_9点标定_halcon_halcon九点标定_halcon标定代码
以下是九点法手眼标定的完整Python代码:
```python
import numpy as np
import cv2
# 定义棋盘格行列数
rows = 6
cols = 8
# 设置世界坐标系中棋盘格点的三维坐标
objp = np.zeros((rows * cols, 3), np.float32)
objp[:, :2] = np.mgrid[0:rows, 0:cols].T.reshape(-1, 2) * 25
# 存储棋盘格角点的像素坐标
imgpoints = []
# 存储棋盘格角点的世界坐标
objpoints = []
# 加载图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 查找棋盘格角点
ret, corners = cv2.findChessboardCorners(gray, (rows, cols), None)
# 如果找到角点,则加入到imgpoints和objpoints中
if ret == True:
objpoints.append(objp)
corners2 = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
imgpoints.append(corners2)
# 绘制角点并显示图像
img = cv2.drawChessboardCorners(img, (rows, cols), corners2, ret)
cv2.imshow('img', img)
# 进行相机标定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
# 打印相机内参和畸变系数
print("相机内参:")
print(mtx)
print("畸变系数:")
print(dist)
# 保存相机内参和畸变系数
np.savez('calibration.npz', mtx=mtx, dist=dist)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意,以上代码中的`criteria`变量未定义。它是一个用于角点精细化的条件参数,可以设置为:
```python
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
```
另外,为了使用该代码,需要将`image.jpg`替换为你的棋盘格图像文件路径。执行完代码后,将会输出相机内参和畸变系数,并保存为`calibration.npz`文件。
阅读全文