Я разрабатываю приложение iOS для обнаружения объектов с использованием OpenCV.
Для моей цели мне нужно установить фиксированное значение фокусного расстояния (чтобы автофокусировка была отключена).
Я хочу указать пользователюкак двигаться (вперед или назад), чтобы объект был точно в фокусе .
Я пытался использовать формулу working_distance = fovX_wanted * focalLength / sensorWidth
(с focalLength, оцененным по процессу калибровки).Проблема в том, что эта формула дает представление о расстоянии для захвата ровно fovX_wanted
(в мм) в горизонтальном измерении, но она не учитывает объект внутри этого «поля зрения».
Итак, в этот момент у меня есть эта функция:
+ (float) calculateOptimalDistance:(float)focalLength fovX: (float)fieldOfViewX sensorWidth:(float)sensorWidth
{
return (fieldOfViewX * focalLength) / sensorWidth;
}
, но она возвращает другое, что мне нужно.
Мне нужен способ получить оптимальное расстояние , чтобы получить идеальный фокус объекта, так что это отличается от того, что я получаю в данный момент, рабочее расстояние .Я знаю размер объекта, поле обзора (в измерении х), которое я хочу иметь на изображении, размер датчика (но это оценка, поэтому я предпочитаю его не использовать) и фокусное расстояние.Как можно идо?