我无法从几个简单的图像中获取正确的视差图,如下所示:
import cv2
import numpy as np
# frames buffer
frames = []
# image categories
cat_selected = 0
cat_list = ['open']
cat_calib = [np.load('LUMIA_CALIB.npy')]
# load images
def im_load(image, calib):
frame = cv2.imread(image,0)
if calib is not None:
frame = cv2.undistort(cv2.resize(frame, (640, 480)), *calib[0])
x, y, w, h = calib[1]
frame = frame[y : y + h, x : x + w]
return frame
for idx, im in enumerate(['left', 'right']):
frames.append(im_load('images/%s/%s.jpg' %(cat_list[cat_selected], im), cat_calib[cat_selected]))
cv2.namedWindow(im, cv2.cv.CV_WINDOW_NORMAL)
cv2.imshow(im, frames[idx])
cv2.imwrite('%s.jpg' %im, frames[idx])
stereo = cv2.StereoBM(1, 16, 15)
disparity = stereo.compute(frames[0], frames[1])
cv2.namedWindow('map', 0)
cv2.imshow('map', cv2.convertScaleAbs(disparity))
cv2.imwrite('disparity.jpg', disparity)
cv2.waitKey(0)
cv2.destroyAllWindows()
disparity
矩阵值的成员单位是多少? P.S
Tsukuba
图像集的视差图,但是好吧。 答案 0 :(得分:0)
您似乎忘记了通过立体声校准程序纠正图像。
两台摄像机之间的距离称为 Baseline 。通常,基线越大,距离的精度越高,在视场上牺牲。反之亦然。
如果您正在使用Python(我在OpenCV的python API中没有专家),则差异可能在像素中。一般来说,如果你想要三角测量的距离值(在现实世界中),你会想要在Python中使用reprojectImageTo3D
或它的等价物。您需要首先使用棋盘校准立体装备(并知道方块的大小)。