Метод OpenCV solvePnP возвращает значения NaN - PullRequest
1 голос
/ 03 июля 2019

Я делаю обнаружение штрих-кода, используя библиотеку zbar с opencv в C ++. Обнаружение штрих-кода работает хорошо, и я получаю такие результаты


result


Теперь я хочу использовать cv::solvePnP, чтобы получить позу моей камеры (уже откалиброванной). В качестве 3D-точек я использую шаблон, в котором при запуске программы я вычисляю то же обнаружение штрих-кода и беру верхний левый угол и нижний правый угол. Затем я вычисляю мировые координаты этих двух точек относительно центра штрих-кода следующим образом:

(pt.x - imageSize.width / 2) * px_to_mm,
(pt.y - imageSize.height / 2) * px_to_mm,
0.

imageSize - это размер штрих-кода (в пикселях), px_to_mm - это соотношение «длина в метрах высоты штрих-кода, деленная на общее количество пикселей высоты штрих-кода», а pt - это точка (вверху слева или внизу справа).

Шаблон


template


Я проверил правильность полученной точки обнаружения штрих-кода. Мировые координаты top_left =[0.054160003, 0.025360001, 0], bottom_right = [0.085200004, 0.046080004, 0]. Я предполагаю, что они правильные, поскольку размеры в пикселях штрих-кода 388 x 200, а высота в метрах 0.016.


Когда я запускаю cv::solvePnP, я получаю эти результаты

translation: [-nan, -nan, -nan] 
rotation: [-nan, nan, -nan;
           -nan, -nan, nan;
           nan, -nan, -nan]

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

1 Ответ

1 голос
/ 03 июля 2019

Как сказал api55 в своем комментарии, проблема заключалась в количестве очков.Добавление двух других углов сработало.

...