Поиск расстояния от камеры до объекта известного размера
Я пытаюсь написать программу с помощью opencv, чтобы рассчитать расстояние от веб-камеры до одного дюйма белой сферы. Я чувствую, что это должно быть довольно легко, но по какой-то причине я рисую пустым. Спасибо за помощь заранее.
2 ответов
вы можете использовать сходство треугольника для калибровки угла камеры и поиска расстояния.
Вы знаете размер вашего шара:D
единицы измерения (например, cm). Поместите его на известное расстояние Z
, скажем, 1 метр = 100 см, перед камерой и измерьте ее кажущуюся ширину в пикселях. Назовите эту ширину d
.
Фокусное расстояние камеры f
(которая немного отличается от камеры к камере) тогда f=d*Z/D
.
когда вы видите этот шар снова с этой камерой, и его кажущаяся ширина d'
пикселей, то по сходству треугольника, вы знаете, что f/d'=Z'/D
и так: Z'=D*f/d'
здесь Z'
- текущее расстояние шара от камеры.
на мой взгляд, вам понадобится модель камеры = калибровочная модель, если вы хотите измерить расстояние или другие вещи (в реальном мире). Модель камеры-обскуры проста, линейна и дает хорошие результаты (но не исправит искажения (будь то радиальные или тангенциальные).
Если вы не используете это, то вы сможете вычислить карту глубины несоответствия (например, если вы используете стереовидение), но она относительна и не дает вам абсолютного измерения, только то, что позади и что находится перед другим объектом....
поэтому я думаю, что ответ: вам нужно будет как-то откалибровать его, возможно, вы могли бы попросить пользователя подойти к сфере к камере, пока вся плоскость изображения не будет полностью заполнена шаром, и с известным ранее измерением шара вы сможете вычислить расстояние....
Жюльен,