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

2024-09-28 17:27:14 发布

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

我有两个立体图像要用来计算深度图。虽然我不幸不知道C/C++,但我知道Python——所以当我发现this tutorial时,我是乐观的。

不幸的是,教程似乎有些过时了。它不仅需要调整以运行(将“createStereoBM”重命名为“StereoBM”),但当它运行时,即使在教程中使用的示例立体图像上,也不会产生好的结果。

下面是一个例子:

image-leftimage-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
(来源:opencv.org

调整参数并不能改善问题。我所能找到的所有文档都是针对openCV代码的原始C版本的,而不是与python库等效的。很不幸,我没能用这个来改进事情。

任何帮助都将不胜感激!


Tags: 图像importpngas教程pltthiscv2
3条回答

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

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

本文作者编写了一组类,使摄像机校准过程比opencv教程更为简化。这些类可用作pypi包:https://github.com/erget/StereoVision

希望这有帮助:)

摄像机在垂直方向上转换而不是水平方向上转换。将图像旋转90度,然后尝试。(转动屏幕向自己证明。我刚拿起笔记本电脑,把它翻到一边。)

您提到的是不同的软件;可能是row-major/column-major,介于原始版本和pyOpenCV之间。

你的图像不正确。

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

只要改变这个:

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

如果你在教程中看到他们说的图像是left帧,它与你的right帧相同。

这是我换车后的结果。

enter image description here

相关问题 更多 >