【发布时间】:2015-02-27 20:22:48
【问题描述】:
我有两个立体图像,我想用它们来计算深度图。虽然很遗憾我不会 C/C++,但我知道 python——所以当我找到this tutorial 时,我很乐观。
不幸的是,该教程似乎有些过时了。它不仅需要调整才能完全运行(将“createStereoBM”重命名为“StereoBM”),而且当它运行时,即使在教程本身中使用的示例立体图像上,它也不会给出好的结果.
这是一个例子:
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()
结果:
这看起来与本教程的作者实现的非常不同:
(来源:opencv.org)
调整参数并不能改善问题。我能找到的所有文档都是针对 openCV 代码的原始 C 版本,而不是 python-library-equivalent。很遗憾,我无法使用它来改进。
任何帮助将不胜感激!
【问题讨论】:
-
只是为了记录,教程来自未来(opencv3.0),但是是的,它已经过时了。对于当前 3.0,您必须使用 cv2.StereoBM_create() 或 cv2.StereoSGBM_create()。
-
cv2.StereoBM 似乎存在,但使用 cv2.StereoBM_create() 或 cv2.StereoSGBM_create() 会出现错误(属性错误)。
-
再一次,你显然使用的是opencv2.4,而不是3.0
-
也许可以使用stereo_matching sample,这也显示了 StereoSGBM 的用法?
-
不错的发现!我会检查那个例子。很抱歉版本混乱。用 homebrew 安装 OpenCV 已经是一场噩梦了,所以我暂时不敢尝试升级。