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