基于非平行线立体图像的OpenCV深度图

2024-06-01 08:00:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我找到了一个关于getting a depth map from stereo images的教程,其中包含以下代码:

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('tsukuba_l.png',0)
imgR = cv2.imread('tsukuba_r.png',0)

stereo = cv2.createStereoBM(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL,imgR)
plt.imshow(disparity,'gray')
plt.show()

简短问题:

外极线必须是平行的吗?我有两个相机,作为一个立体系统,但有一个小的旋转和平移,因为我只是把他们放在一张桌子上。所以我的外线是不平行的。你知道吗


Tags: fromimportpngaspltcv2depth平行
1条回答
网友
1楼 · 发布于 2024-06-01 08:00:44

是的,极线需要平行createStereoBM才能工作。你知道吗

为此,您需要估计两个相机之间的外部校准(旋转和平移)。它的工作原理与单摄像机校准基本相同。有一些立体声校准教程,但我还没有找到一个好的python刚刚。看看ROS camera calibration tool。你知道吗

下一步你需要校正你的相机图像。这意味着你使用的映射,你从立体校准和扭曲你的图像,使外极线是平行的。看看OpenCV的stereoRectify文档:here。你知道吗

当您使用我链接的文档中建议的校准参数调用initUndistortRectifyMap时,您的图像会扭曲,使极线平行,现在您应该能够使用createStereoBM创建视差图。你知道吗

相关问题 更多 >