利用 OpenCV 实现张正友相机标定法、并对其中一幅畸变图像进行矫正,显示获得的相 机内部参数矩阵和畸变系数矩阵内容和畸变矫正后的图像粘贴实验结果;
时间: 2024-05-08 09:17:20 浏览: 100
以下是使用 OpenCV 实现张正友相机标定法的代码:
```
import numpy as np
import cv2
# 准备标定板的图像点
objp = np.zeros((6*9,3), np.float32)
objp[:,:2] = np.mgrid[0:9,0:6].T.reshape(-1,2)
# 存储所有的图像点和世界点
objpoints = [] # 世界点
imgpoints = [] # 图像点
# 获取标定板图像
images = glob.glob('calibration_images/*.jpg')
# 遍历所有图像
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 寻找标定板的角点
ret, corners = cv2.findChessboardCorners(gray, (9,6),None)
# 如果找到,则添加到objpoints和imgpoints中
if ret == True:
objpoints.append(objp)
imgpoints.append(corners)
# 可视化角点
cv2.drawChessboardCorners(img, (9,6), corners, ret)
cv2.imshow('img',img)
cv2.waitKey(500)
cv2.destroyAllWindows()
# 使用张正友相机标定法计算相机内部参数矩阵和畸变系数矩阵
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
# 打印相机内部参数矩阵和畸变系数矩阵
print("相机内部参数矩阵:\n", mtx)
print("畸变系数矩阵:\n", dist)
# 对一幅畸变图像进行矫正
img = cv2.imread('calibration_test_image.jpg')
h, w = img.shape[:2]
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w,h), 1, (w,h))
# 使用undistort函数进行矫正
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)
# 显示畸变矫正后的图像
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
运行上述代码后,会输出相机内部参数矩阵和畸变系数矩阵,并显示矫正后的图像。
注意:在运行代码前需要先准备好标定板图像。可以在 OpenCV 官网的教程中找到相应的标定板图像。此外,还需要将标定板图像放在 calibration_images 目录下,并将要矫正的图像放在代码所在目录下,并将其命名为 calibration_test_image.jpg。
阅读全文