jwd*_*ink 13 python opencv depth
我有两个立体图像,我想用来计算深度图.虽然我很遗憾不知道C/C++,但我确实知道python--所以当我找到这个教程时,我很乐观.
不幸的是,该教程似乎有点过时了.它不仅需要调整才能运行(将'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()
Run Code Online (Sandbox Code Playgroud)
结果:
这看起来与本教程的作者所达到的完全不同:
好结果http://docs.opencv.org/trunk/_images/disparity_map.jpg
调整参数并不能改善问题.我能找到的所有文档都是针对openCV代码的原始C版本,而不是python-library-equivalent.遗憾的是,我还没有用它来改进.
任何帮助,将不胜感激!
wil*_*ill 18
你的图像错误.
看一下图像,灯后面的锡可以让你计算出两张图像的相机位置,
只需改变这个:
# v
imgR = cv2.imread('Yeuna9x.png',0)
imgL = cv2.imread('SuXT483.png',0)
# ^
Run Code Online (Sandbox Code Playgroud)
如果您查看教程中的图像,他们说的是left
框架,它与您的图像相同right
.
这是我改变后的结果.
小智 -3
相机垂直平移而不是水平平移。将图像旋转 90 度,然后尝试。(通过旋转屏幕向自己证明这一点。我刚刚拿起我的笔记本电脑并将其翻转到边缘。)
你提到了不同的软件;也许是原始版本和 pyOpenCV 之间的行主/列主类型。