Я хочу оценить расстояние от объекта до моей камеры. Это должно быть с использованием Opencv.
Я прочитал, что мне нужно использовать две камеры вместо одной, и я нашел код с Matlab, но у меня нет никакого опыта в этом.
Любая помощь будет оценена.
Да, определенно возможно рассчитать глубину на двух камерах, используя простую модель камеры-обскуры:
depth = bcm*fcm/(sensorWidthCm*disparity/(float)horizontalResolution);
Здесь, чтобы найти среднее несоответствие (горизонтальное различие пикселей в точках), вы можете использовать SurfDescriptorExtractor
и чтобы найти пары совпадений, вы можете использовать BFMatcher
как в ссылке:
http://docs.opencv.org/doc/tutorials/features2d/feature_description/feature_description.html
fcm, bcm, sensorWidthCm и horizontalResolution — все параметры камеры: fcm — фокусное расстояние камеры, bcm — расстояние между камерами, sensorWidthCm — ширина датчика камеры, а горизонтальное разрешение — номер пикселя в горизонтальном направлении. На самом деле вам не нужны все эти параметры отдельно. Вам просто нужно поэкспериментировать с известной глубиной, чтобы найти соотношение:bcm*fcm/sensorWidthCm
Горизонтальное разрешение изображения уже известно во время захвата изображения.
видеть это ответ:
distance to object (mm) = focal length (mm) * real height of the object (mm) * image height (pixels)
---------------------------------------------------------------------------
object height (pixels) * sensor height (mm)
Ты можешь использовать solvePnP Функция, если Вы знаете точные размеры объекта, и это легко обнаружить. Вам также нужно будет выполнить калибровку камеры, чтобы установить единицу измерения в координатах камеры.