Python / OpenCV:从立体图像计算深度图

时间:2014-12-31 21:05:27

标签: python opencv depth

我有两个立体图像,我想用来计算深度图。虽然我很遗憾不知道C / C ++,但我确实知道python--所以当我找到this tutorial时,我很乐观。

不幸的是,该教程似乎有点过时了。它不仅需要调整才能运行(重命名' createStereoBM'到#StereoBM')但是当它运行时,它不会给出好的结果,即使是教程本身使用的示例立体图像。

以下是一个例子:

image-left image-right

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

imgL = cv2.imread('Yeuna9x.png',0)
imgR = cv2.imread('SuXT483.png',0)

stereo = cv2.StereoBM(1, 16, 15)
disparity = stereo.compute(imgL, imgR)

plt.imshow(disparity,'gray')
plt.show()

结果:

the result

这看起来与本教程的作者所达到的完全不同:

good result http://docs.opencv.org/trunk/_images/disparity_map.jpg

调整参数不会改善问题。我能找到的所有文档都是针对openCV代码的原始C版本,而不是python-library等价的。我很遗憾没有能够用它来改善事情。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:18)

你的图像错误。

查看图像,灯后面的锡可以让你计算出两张图像的相机位置,

只需改变一下:

#  v
imgR = cv2.imread('Yeuna9x.png',0)
imgL = cv2.imread('SuXT483.png',0)
#  ^

如果您查看教程中的图片,他们说的是left框架,则与您的right框架相同。

这是我改变后的结果。

enter image description here

答案 1 :(得分:1)

您可能需要不断调整块匹配算法的参数。

查看此博客文章:https://erget.wordpress.com/2014/03/13/building-an-interactive-gui-with-opencv/

该文章的作者编写了一组类,使校准相机的过程比opencv教程更加简化。这些类以pypi包的形式提供:https://github.com/erget/StereoVision

希望这会有所帮助:)

答案 2 :(得分:-2)

相机已垂直翻译而非水平。将图像旋转90度,然后尝试。 (通过旋转屏幕向自己证明。我只是拿起笔记本电脑并将其转向边缘。)

你提到不同的软件;也许是原始和pyOpenCV之间的行主要/列主要类型。