我是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.createStereoBM
与cv2.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。
可能出现这些错误的原因是什么?
答案 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)
警告即使图像路径错误,也不会抛出任何错误,