利用圆形Pattern进行标定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在OpenCV中,圆形标定图案可以用于相机的标定圆形标定图案分为对称圆形和非对称圆形两种类型。使用圆形标定图案进行相机标定的步骤如下: 1. 准备标定图案:根据需要选择对称圆形或非对称圆形标定图案。可以使用OpenCV自带的例程中的imagelist_creator.cpp生成标定图像。 2. 拍摄标定图像:使用相机拍摄一系列包含标定图案的图像。确保图像中的标定图案清晰可见,并且标定图案在不同位置和角度下都有足够的变化。 3. 提取标定图案的角点:使用OpenCV的findCirclesGrid函数来检测图像中标定图案的角点。该函数会返回每个标定图案的角点坐标。 4. 标定相机:使用OpenCV的calibrateCamera函数来进行相机标定。将标定图像的角点坐标和实际世界坐标传递给该函数,它将返回相机的内参矩阵、畸变系数和旋转平移向量等标定结果。 5. 评估标定结果:可以使用reprojectionError函数来评估标定结果的准确性。该函数会计算标定图案的重投影误差,即标定图案的角点在标定结果下的重投影位置与实际位置之间的差距。 下面是一个使用对称圆形标定图案进行相机标定的示例代码: ```python import cv2 import numpy as np # 准备标定图案 pattern_size = (7, 7) # 标定图案的内角点个数 pattern_points = np.zeros((np.prod(pattern_size), 3), np.float32) pattern_points[:, :2] = np.indices(pattern_size).T.reshape(-1, 2) # 拍摄标定图像 images = [] # 存储标定图像 # 读取图像并检测角点 for i in range(1, 21): img = cv2.imread(f'calibration_images/{i}.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret, corners = cv2.findCirclesGrid(gray, pattern_size, None) if ret: images.append((gray, corners)) # 标定相机 obj_points = [] # 存储标定图案的实际世界坐标 img_points = [] # 存储标定图案的图像坐标 for gray, corners in images: obj_points.append(pattern_points) img_points.append(corners) ret, camera_matrix, dist_coeffs, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None) # 评估标定结果 mean_error = 0 for i in range(len(obj_points)): img_points2, _ = cv2.projectPoints(obj_points[i], rvecs[i], tvecs[i], camera_matrix, dist_coeffs) error = cv2.norm(img_points[i], img_points2.reshape(-1, 2), cv2.NORM_L2) / len(img_points2) mean_error += error mean_error /= len(obj_points) print("Mean reprojection error: ", mean_error) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值