资源简介
单目相机标定,棋盘格畸变纠正,附带代码注释,输出内参,外参,畸变函数
代码片段和文件信息
import cv2
import numpy as np
import glob
# 找棋盘格角点
# 阈值
#criteria:角点精准化迭代过程的终止条件
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER 30 0.001)
#棋盘格模板规格
w = 6
h = 9
# 世界坐标系中的棋盘格点例如(000) (100) (200) ....(850),去掉Z坐标,记为二维矩阵
objp = np.zeros((w*h3) np.float32)
‘‘‘
设定世界坐标下点的坐标值,因为用的是棋盘可以直接按网格取;
假定棋盘正好在x-y平面上,这样z值直接取0,简化初始化步骤。
mgrid把列向量[0:cbraw]复制了cbcol列,把行向量[0:cbcol]复制了cbraw行。
转置reshape后,每行都是4×6网格中的某个点的坐标。
‘‘‘
objp[::2] = np.mgrid[0:w0:h].T.reshape(-12)
# 储存棋盘格角点的世界坐标和图像坐标对
objpoints = [] # 在世界坐标系中的三维点
imgpoints = [] # 在图像平面的二维点
#glob是个文件名管理工具
images = glob.glob(‘/home/fanfan/相机标定/*.jpeg‘)
#对每张图片,识别出角点,记录世界物体坐标和图像坐标
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(imgcv2.COLOR_BGR2GRAY)
# 找到棋盘格角点
#寻找角点,存入corners,ret是找到角点的flag
ret corners = cv2.findChessboardCorners(gray (wh)None)
# 如果找到足够点对,将其存储起来
if ret == True:
#执行亚像素级角点检测
cv2.cornerSubPix(graycorners(1111)(-1-1)criteria)
objpoints.append(objp)
imgpoints.append(corners)
# 将角点在图像上显示
#在棋盘上绘制角点只是可视化工具
cv2.drawChessboardCorners(img (wh) corners ret)
评论
共有 条评论