2017-01-30 16 views
2

На моей левой камере, правильной камере и стерео калибровке; Я указал размер площадиOpenCV - Метрическое представление в `reprojectImageTo3D()`

0.025 (25 millimeters)

Так я получаю очки в 3D с помощью reprojectImageTo3D(disp, Q)

disp = stereo.compute(dstL, dstR).astype(np.float32)/16.0 
disp = abs(disp-min_disp)/num_disp 

Я получил Q от stereoRectify

Я сфотографировал коробку 2,5 - 3 фута от стереокамеры и извлекли координаты xyz лежащей на ней точки. Его значение Z составляет 140.8764

Как это интерпретировать?

Мои Q выглядит так

|1, 0, 0, -454.05216408| 
|0, 1, 0, -231.55072975| 
|0, 0, 0, 816.20826814 | 
|0, 0, 13.79730561, -0 | 

ответ

1

Использовав блоки последовательно во всех соответствующих функций калибровки (в данном случае метров), то на выходе из cv::reprojectImageTo3D должны иметь одинаковые единицы (здесь опять метров).

В Q значение в (3,2) является обратным значением базовой линии камеры (здесь 0.0725 m, что имеет смысл). Значения в (0,3) и (1,3) являются xy-координатами главной точки (примерно середина изображения, снова смысл) и (2,3) является относительным фокусным расстоянием (относительно ширины изображения).

Не уменьшайте разницу. Поэтому прокомментируйте эту строку:

#disp = abs(disp-min_disp)/num_disp 
+0

Когда я прокомментирую эту строку в 'python', когда я imshow(), она отображает только белый цвет. – Wreigh

+0

где вы получили '0.0725m'? им так жаль, им тяжело на это! спасибо за вашу помощь – Wreigh

+0

'1/13.797 = 0.0725', Если вы не хотите отображать карту несоответствий, вычислите ее минимальный и максимальный масштаб и нарисуйте ее до [0,255] 8bpp для визуализации, но используйте оригинал для повторного воспроизведения. – mainactual