张正友相机标定Opencv实现
时间: 2023-08-31 07:12:50 浏览: 116
张正友相机标定是一种常用的相机标定方法,可以用于求解相机内参和畸变参数。下面是使用OpenCV实现的步骤:
1. 准备标定板:使用一个标定板,比如黑白棋盘格,打印到A4纸或者其他材料上。
2. 拍摄标定板:在不同姿态下拍摄标定板的图片,要求每张图片中标定板占据整个画面,且拍摄方向不变。
3. 提取角点:使用OpenCV函数`findChessboardCorners()`提取每张图片中标定板的角点坐标。
4. 进行标定:使用OpenCV函数`calibrateCamera()`进行相机标定,得到相机内参矩阵和畸变参数。
5. 验证标定结果:使用OpenCV函数`undistort()`对标定板图片进行畸变矫正,验证标定结果是否正确。
下面是使用Python实现的示例代码:
```python
import numpy as np
import cv2
# 准备标定板
objp = np.zeros((6*8,3), np.float32)
objp[:,:2] = np.mgrid[0:8,0:6].T.reshape(-1,2)
# 存储标定板角点坐标
objpoints = []
imgpoints = []
# 读取标定板图片
images = glob.glob('calib/*.jpg')
# 提取角点
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, (8,6),None)
if ret == True:
objpoints.append(objp)
imgpoints.append(corners)
# 进行标定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None)
# 验证标定结果
img = cv2.imread('calib/test.jpg')
h, w = img.shape[:2]
newcameramtx, roi=cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),1,(w,h))
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Undistorted', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上就是使用OpenCV实现张正友相机标定的基本步骤。
阅读全文