Если вы используете OpenCV 2.4.x вы должны смотреть на http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#stereobm-operator, который говорит вам:
неравенство - Выходная карта несоответствий. Он имеет тот же размер, что и входные изображения. Когда disptype == CV_16S, карта представляет собой 16-разрядное одноканальное одностороннее изображение, содержащее значения несоответствия, масштабированные на 16. Чтобы получить истинные значения несоответствия из такого представления с фиксированной точкой, вам необходимо разделить каждый элемент disp на 16. Если disptype == CV_32F, карта несоответствия будет уже содержать реальные значения несоответствия на выходе.
Так что, если вы выбрали disptype = CV_16S
в процессе вычислений, вы можете получить доступ к пиксель в пиксель-позиции (X, Y) по:
short pixVal = disparity.at<short>(Y,X);
в то время как значение диспропорция
float disparity = pixVal/16.0f;
, если вы выбрали disptype = CV_32F
при вычислении, вы можете получить доступ к несоответствию напрямую:
float disparity = disparity.at<float>(Y,X);
Доступ к матрице неравенства с определенно должен быть неправильным!
Имейте в виду, что могут быть различия для разных версий OpenCV!
Я не вижу никакой разницы между 1 и 2. Мне что-то не хватает? – GPPK
Извините, пропустил это ... я увлекаюсь ... Я писал внутри <> без использования опции вставки кода –
, откуда вы получили значения несоответствия? Библиотеки захвата Kinect обычно предоставляют 16-битные значения без знака (но глубина, а не различие), которые будут «.at». Другие методы могут вычислять значения «» или даже «» или что-то еще. Вы можете попробовать распечатать 'disparity.depth' и сообщить нам. Еще одна вещь, которая стоит упомянуть: если ваши X и Y являются символами изображения X и Y, то ваш доступ неправильный и должен быть либо '.at (Y, X)', либо '.at (cv :: Point (X, Y)) ' –
Micka