OpenCV, проекция на 3D-поверхность

В настоящее время я работаю над школьным проектом с «автономным» автомобилем, мне нужно спроецировать изображение с моей камеры (которая расположена на машине и слегка наклонена) на двухмерную поверхность, представляющую дорогу (я предполагаю, что дорога идеально плоский), учитывая FOV, положение и угол моей камеры относительно поверхности, как бы я проецировал ее в OpenCV? Что мне нужно точно, так это то, чтобы проекция была такой, как если бы я снимал дорога сверху под углом 90°. Заранее спасибо за помощь...


person Angramme    schedule 15.01.2019    source источник


Ответы (1)


используйте функцию opencv, чтобы сделать это

C++: void reprojectImageTo3D(InputArray disparity, OutputArray _3dImage, InputArray Q, bool handleMissingValues=false, int ddepth=-1 )

Матрица Q обратна матрице проекции K, которая содержит центр камеры и fx fy

введите здесь описание изображения

Вы можете искусственно создать несоответствие, скажем, карту градиента, чтобы представить глубину плоской поверхности.

Затем передайте Q, disparty и output3Dmat, который вы хотите

Программа даст вам то, что вы хотите

person Dr Yuan Shenghai    schedule 25.05.2019
comment
Хе-хе, немного поздно :) Я сделал это неправильно, используя warpPerspective (неверно, потому что дальнейшие вещи ближе по оси Y), но в конце это сработало: P, большое спасибо за ваш ответ, я запомню это в следующий раз - person Angramme; 26.05.2019