Я новичок в 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 и не превышать ширину или высоту изображения в функции на предпоследней строке (disparity=...). Я попытался уменьшить размер блока, но все еще была ошибка, я проверил правильность путей изображения, и оба изображения имеют одинаковый размер.
Затем я попытался использовать вместо него StereoSGBM_create, код версии 2:
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: данные изображения не могут быть преобразованы в число с плавающей запятой.
Любая причина, по которой эти ошибки могут происходить?