相机标定内参后去除畸变标定外参的opencv代码实现
时间: 2023-06-13 16:04:42 浏览: 138
opencv相机标定(可输出内参、畸变系数和外参)
相机标定内参后,可以通过以下代码实现去除畸变和标定外参的计算:
```python
import cv2
import numpy as np
# 相机内参矩阵
K = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]])
# 畸变系数
dist_coeffs = np.array([k1, k2, p1, p2, k3])
# 图像大小
img_size = (width, height)
# 标定外参矩阵
R = np.array([[r11, r12, r13], [r21, r22, r23], [r31, r32, r33]])
T = np.array([tx, ty, tz])
# 读入图像
img = cv2.imread('image.png')
# 去除畸变
new_K, roi = cv2.getOptimalNewCameraMatrix(K, dist_coeffs, img_size, 1, img_size)
undistorted_img = cv2.undistort(img, K, dist_coeffs, None, new_K)
# 计算投影矩阵
Rt = np.hstack((R, T.reshape(3, 1)))
P = np.dot(K, Rt)
# 显示去除畸变后的图像和标定外参矩阵
cv2.imshow('undistorted_img', undistorted_img)
print("Projection Matrix:\n", P)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`cv2.getOptimalNewCameraMatrix()` 可以计算去除畸变后的内参矩阵和 ROI 区域,`cv2.undistort()` 可以去除畸变,`np.hstack()` 可以将旋转矩阵和平移向量合并为标定外参矩阵,`np.dot()` 可以计算投影矩阵。
阅读全文