视差图教程SADWindowSize和图像不能浮动

时间:2017-11-08 12:33:11

标签: python-2.7 numpy opencv matplotlib disparity-mapping

我是Python的新手,并且一直在使用基本教程(https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_calib3d/py_depthmap/py_depthmap.html#py-depthmap)来创建两个图像的视差图,但我有几个错误。

我使用的是Python 2.7,OpenCV 3.3.0,matplotlib 1.3,numpy 1.10.2

这是我的代码v1:

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

     imgL = cv2.imread("C:\Python27\tsukuba_l.png,0")
     imgR = cv2.imread("C:\Python27\tsukuba_r.png,0")

     stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
     disparity = stereo.compute(imgL,imgR)
     plt.imshow(disparity,'gray')
     plt.show()

我更正了教程中的stereoBM功能,以便将最新的openCV版本cv2.createStereoBMcv2.StereoBM_create相匹配,但出现了错误。 (-211)SADWindowSize必须是奇数,在5..255之内并且不大于第2行到最后一行的图像宽度或高度(disparity = ...)。我尝试减小块大小,但仍然有错误,我已检查图像路径是否正确,两个图像大小相同。

然后我尝试使用StereoSGBM_create代替v2代码:

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

     imgL = cv2.imread("C:\Python27\tsukuba_l.png,0")
     imgR = cv2.imread("C:\Python27\tsukuba_r.png,0")

     stereo = cv2.StereoSGBM_create(minDisparity=5, numDisparities=16, blockSize=5)
     disparity = stereo.compute(imgL,imgR)
     plt.imshow(disparity,'gray')
     plt.show()

但是这会返回:

  

TypeError:图像数据无法转换为float。

可能出现这些错误的原因是什么?

1 个答案:

答案 0 :(得分:1)

错误错误:

更改

 imgL = cv2.imread("C:\Python27\tsukuba_l.png,0")
 imgR = cv2.imread("C:\Python27\tsukuba_r.png,0")

 imgL = cv2.imread("C:\Python27\tsukuba_l.png",0)
 imgR = cv2.imread("C:\Python27\tsukuba_r.png",0)

或更好:

 imgL = cv2.imread("C:\Python27\tsukuba_l.png",cv2.IMREAD_GRAYSCALE)
 imgR = cv2.imread("C:\Python27\tsukuba_r.png",cv2.IMREAD_GRAYSCALE)

来自cv2.imread

  

警告即使图像路径错误,也不会抛出任何错误,