Ответ 1
Вам не нужно знать расстояние до объекта, только разрешение и угол обзора камеры.
Для вычисления угла требуется только простая линейная интерполяция. Например, допустим, камера с разрешением 1920x1080, которая охватывает угол обзора 45 градусов по диагонали.
В этом случае sqrt (1920 2 + 1080 2) дает 2292,19 пикселей по диагонали. Это означает, что каждый пиксель представляет 45/2292.19 =.0153994 градусов.
Итак, вычислите расстояние от центра (в пикселях), умножьте на .0153994, и у вас есть угол от центра (для этой камеры - для вашего, вам, очевидно, придется использовать свое разрешение и угол вид).
Конечно, это несколько приблизительное - его точность будет зависеть от того, насколько сильно искажается объектив. При использовании зум-объектива (особенно широкий угол) вы можете рассчитывать на достаточно высокий уровень. С фиксированным фокусным расстоянием объектив (особенно если он не охватывает угол более 90 градусов или около того), он обычно будет довольно низким.
Если вы хотите улучшить точность, вы можете начать с изображения плоского прямоугольника с прямыми линиями прямо под углом зрения камеры, а затем вычислить искажение, основанное на отклонении от совершенно прямолинейного результата. Если вы работаете с чрезвычайно широкоугольным объективом, это может быть почти необходимо. С объективом, охватывающим более узкий угол обзора (особенно, как уже упоминалось, если он фиксирует фокусное расстояние), это редко бывает целесообразным (такие линзы часто имеют лишь долю процента искажений).