如何用Python获得相机的内参矩阵和外参矩阵
时间: 2023-07-16 11:13:29 浏览: 269
要获取相机的内参矩阵和外参矩阵,通常需要进行相机标定。相机标定是指确定相机的内部参数(内参矩阵)和外部参数(外参矩阵)的过程。
以下是使用OpenCV库进行相机标定的示例代码:
```python
import cv2
import numpy as np
# 设置棋盘格的尺寸
pattern_size = (9, 6)
# 创建棋盘格的3D坐标
objp = np.zeros((pattern_size[0] * pattern_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:pattern_size[0], 0:pattern_size[1]].T.reshape(-1, 2)
# 存储图像点和对象点的数组
obj_points = []
img_points = []
# 读入图像
img = cv2.imread('img.jpg')
# 转灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 寻找棋盘格角点
ret, corners = cv2.findChessboardCorners(gray, pattern_size, None)
if ret == True:
# 添加对象点和图像点
obj_points.append(objp)
img_points.append(corners)
# 绘制角点
cv2.drawChessboardCorners(img, pattern_size, corners, ret)
# 进行相机标定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None)
# 打印内参矩阵和外参矩阵
print("内参矩阵:")
print(mtx)
print("外参矩阵:")
print(rvecs, tvecs)
# 显示图像
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`cv2.calibrateCamera()`是进行相机标定的函数,它返回了内参矩阵(`mtx`)、畸变系数(`dist`)、旋转向量(`rvecs`)和平移向量(`tvecs`)。在上面的代码中,我们只打印了内参矩阵和外参矩阵。
阅读全文