matlab标定投影误差,opencv 角点检测+相机标定+去畸变+重投影误差计算

https://blog.csdn.net/u010128736/article/details/52875137

https://blog.csdn.net/h532600610/article/details/51800488

python 角点检测+相机标定+去畸变+重投影误差计算:

#coding:utf-8

importcv2importnumpy as npimportglob#找棋盘格角点#阈值

criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)#棋盘格模板规格

w = 9h= 6

#世界坐标系中的棋盘格点,例如(0,0,0), (1,0,0), (2,0,0) ....,(8,5,0),去掉Z坐标,记为二维矩阵

objp = np.zeros((w*h,3), np.float32)

objp[:,:2] = np.mgrid[0:w,0:h].T.reshape(-1,2)#储存棋盘格角点的世界坐标和图像坐标对

objpoints = [] #在世界坐标系中的三维点

imgpoints = [] #在图像平面的二维点

images= glob.glob('calib/*.png')for fname inimages:

img=cv2.imread(fname)

gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#找到棋盘格角点

ret, corners =cv2.findChessboardCorners(gray, (w,h),None)#如果找到足够点对,将其存储起来

if

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python和OpenCV进行圆形标定板的相机标定畸变矫正和投影误差计算的完整代码: ``` import numpy as np import cv2 import glob # 定义圆形标定板的行数和列数 rows = 7 cols = 10 # 定义每个圆的直径和间距 circle_diameter = 20 # 每个圆的直径 circle_spacing = 10 # 圆之间的间距 # 获取标定板图像的路径 images = glob.glob('path/to/images/*.jpg') # 初始化标定板角点的空列表 obj_points = [] img_points = [] # 设置标定板上的点的坐标 objp = np.zeros((rows * cols, 3), np.float32) objp[:, :2] = np.mgrid[0:rows, 0:cols].T.reshape(-1, 2) objp = objp * (circle_diameter + circle_spacing) # 针对每个标定板图像进行处理 for fname in images: # 读取图像 img = cv2.imread(fname) # 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 查找圆形标定板角点 ret, corners = cv2.findCirclesGrid(gray, (cols, rows), None) # 如果找到了角点,则将其添加到角点列表中 if ret == True: obj_points.append(objp) img_points.append(corners) # 在图像上显示角点 cv2.drawChessboardCorners(img, (cols, rows), corners, ret) # 显示图像 cv2.imshow('img', img) cv2.waitKey(500) # 关闭窗口 cv2.destroyAllWindows() # 进行相机标定 ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None) # 打印结果 print("Camera matrix:\n", mtx) print("Distortion coefficients:\n", dist) # 进行畸变矫正 for fname in images: # 读取图像 img = cv2.imread(fname) # 进行畸变矫正 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('dst', dst) cv2.waitKey(500) # 关闭窗口 cv2.destroyAllWindows() # 计算投影误差 mean_error = 0 for i in range(len(obj_points)): img_points2, _ = cv2.projectPoints(obj_points[i], rvecs[i], tvecs[i], mtx, dist) error = cv2.norm(img_points[i], img_points2, cv2.NORM_L2) / len(img_points2) mean_error += error print("Total error: ", mean_error / len(obj_points)) ``` 以上代码实现了圆形标定板的相机标定畸变矫正和投影误差计算,并在每个步骤中显示了结果。具体实现还需要根据实际情况进行修改和调试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值