我有两个立体图像,我想用来计算深度图。虽然我很遗憾不知道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()
结果:
这看起来与本教程的作者所达到的完全不同:
good result http://docs.opencv.org/trunk/_images/disparity_map.jpg
调整参数不会改善问题。我能找到的所有文档都是针对openCV代码的原始C版本,而不是python-library等价的。我很遗憾没有能够用它来改善事情。
任何帮助将不胜感激!
答案 0 :(得分:18)
你的图像错误。
查看图像,灯后面的锡可以让你计算出两张图像的相机位置,
只需改变一下:
# v
imgR = cv2.imread('Yeuna9x.png',0)
imgL = cv2.imread('SuXT483.png',0)
# ^
如果您查看教程中的图片,他们说的是left
框架,则与您的right
框架相同。
这是我改变后的结果。
答案 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之间的行主要/列主要类型。