Учебное пособие по карте несоответствия SADWindowSize и изображение не могут плавать

Я новичок в 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: данные изображения не могут быть преобразованы в число с плавающей запятой.

Любая причина, по которой эти ошибки могут происходить?


person SarahB    schedule 08.11.2017    source источник


Ответы (1)


Ошибка печати :

сдача

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

to

 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

Предупреждение. Даже если путь к изображению неверный, он не выдаст никакой ошибки.

person Indent    schedule 08.11.2017
comment
Пожалуйста, примите ответ, если он вас устраивает. Благодарность ;-) - person Indent; 08.11.2017
comment
Я пробовал обе версии своего кода с обоими исправлениями, и он дает те же ошибки. Спасибо за примечание о том, что неправильный путь не выдает ошибку, по крайней мере, это одна вещь, которую я могу списать - person SarahB; 08.11.2017