注意
所谓单目相机三维重建并非得到了图片的深度信息!!!!
而是由棋盘确定新的空间坐标点,然后返回到像素坐标系中(即图片中),让人看起来像三维的!
效果如图
本文章设置的xyz轴遵从右手定则
需要提前对相机进行标定,得到内参和畸变参数
标定的内参和畸变参数方法点击这里
三维重建坐标系代码
import cv2
import numpy as np
import glob
def draw(img, corners, imgpts):
corner = tuple(corners[0].ravel())
img = cv2.line(img, corner, tuple(imgpts[0].ravel()), (255,0,0), 5)
img = cv2.line(img, corner, tuple(imgpts[1].ravel()), (0,255,0), 5)
img = cv2.line(img, corner, tuple(imgpts[2].ravel()), (0,0,255), 5)
return img
if __name__ == '__main__':
checker = [8, 11] #设置角点个数,这里采用9*12的棋盘格,所以由8*11个角点
distance = 30 #设置棋盘格每一个小块的距离,这里是30mm
with np.load('D:\\ML\\Project_python\\my_code\\video_and_img\\checkerboard1.npz') as X:
#传入标定的结果,即内参和畸变参数
mtx, dist = [X[i] for i in ('mtx', 'dist')]
criteria = (cv2.TERM_CRITERIA_EPS +