Проецирование 3D-точек на неискаженную область интереса с помощью OpenCV - PullRequest
0 голосов
/ 05 мая 2020

Предположим, у меня есть камера, которая была откалибрована с использованием полного кадра камеры для получения матрицы камеры и коэффициентов искажения. Также предположим, что у меня есть трехмерная мировая точка, выраженная в кадре этой камеры.

Я знаю, что могу использовать cv::projectPoints() с rvec=tvec=(0,0,0), матрицей камеры и коэффициентами искажения для проецирования точки на ( полный) искаженный кадр. Я также знаю, что если я получаю ROI от камеры (которая представляет собой обрезанную часть полностью искаженного кадра), я могу отрегулировать ROI, просто вычитая координату (x,y) верхнего левого угла ROI из результат cv::projectPoints(). Наконец, я знаю, что если я использую cv::projectPoints() с rvec=tvec=(0,0,0), матрицей камеры и нулевыми коэффициентами искажения, я могу проецировать точку на полный неискаженный кадр (поправьте меня, если я ошибаюсь, но я думаю, что для этого требуется, чтобы вы использовать ту же матрицу камеры в cv::undistort() и не использовать newCameraMatrix).

Как мне справиться со случаем, когда я хочу проецировать на неискаженную версию получаемой мной ROI (т. е. Я получаю (искаженную) ROI, а затем использую cv::undistort() на нем, используя метод, описанный здесь , чтобы учесть тот факт, что это ROI, а затем я хочу спроецировать 3D-точку на полученное изображение) ?

Если есть лучший способ go обо всем этом, я также открыт для предложений. Моя цель состоит в том, чтобы иметь возможность проецировать 3D-точки на искаженные и неискаженные кадры с или без наличия ROI, где ROI всегда изначально определяется потоком с камеры и, следовательно, всегда определяется в искаженном кадре (т.е. различные случаи: искаженный полный кадр, искаженный ROI, неискаженный полный кадр, неискаженная версия искаженного ROI).

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