在作SLAM时,但愿用到深度图来辅助生成场景,因此要构创建体视觉,在这里使用OpenCV的Stereo库和python来进行双目立体视觉的图像处理。python
立体标定
应用标定数据
转换成深度图
标定
在开始以前,须要准备的固然是两个摄相头,根据你的需求将两个摄像头进行相对位置的固定,我是按平行来进行固定的(若是为了追求两个双目图像更高的生命度,也能够将其按必定钝角固定,这样作又限制了场景深度的扩展,根据实际需求选择)算法
因为摄像头目前是咱们手动进行定位的,咱们如今还不知道两张图像与世界坐标之间的耦合关系,因此下一步要进行的是标定,用来肯定分别获取两个摄像头的内部参数,而且根据两个摄像头在同一个世界坐标下的标定参数来获取立体参数。注:不要使用OpenCV自带的自动calbration,其对棋盘的识别率极低,使用Matlab的Camera Calibration Toolbox更为有效,具体细节请看:摄像机标定和立体标定ide
同时从两个摄像头获取图片spa
import cv2
import time
AUTO = True # 自动拍照,或手动按s键拍照
INTERVAL = 2 # 自动拍照间隔
cv2.namedWindow("left")
cv2.namedWindow("right")
cv2.moveWindow("left", 0, 0)
cv2.moveWindow("right", 400, 0)
left_camera = cv2.VideoCapture(0)
right_camera = cv2.VideoCapture(1)
counter = 0
utc = time.time()
pattern = (12, 8) # 棋盘格尺寸
folder = "./snapshot/" # 拍照文件目录
def shot(pos, frame):
global counter
path = folder + pos + "_" + str(counter) + ".jpg"
cv2.imwrite(path, frame)
print("snapshot saved into: " + path)
while True:
ret, left_frame = left_camera.read()
ret, right_frame = right_camera.read()
cv2.imshow("left", left_frame)