Рекомпрессионный объект OpenCVImageTo3D() выводит «3-канальное изображение, представляющее трехмерную поверхность». Вы можете получить доступ к этим данным,Значения глубины отображения в opencv's repjectImageTo3D()
Vec3f coordinates = _3dImage.at<Vec3f>(y,x);
float depth = _3dImage.at<Vec3f>(y,x)[2];
ведьма возвращает вектор [X, Y, Z].
В "Learning OpenCV" по Гари Брадски & Адриан Kaehler, это объясняется тем, что глубина рассчитывается путем
Z = F T/(x_left - x_right)
, где е = фокусное расстояние , T = основа для глаз/трансляция между камерами, (x_left - x_right) = несоответствие
Эта точная формула реализована в OpenCV (я проверил исходный код - однако по какой-то причине есть дополнительный отрицательный знак). Вопрос: В каком блоке указаны значения X, Y, Z?
T находится в вашем устройстве (например, мм), x_l - x_r находится в пикселях и [f] =?
Когда вы откалибруете камеру, вы указываете размер шахматной доски в единицах реального мира (например, мм). Следовательно, имеет ли внутренняя матрица единицы реального мира? Или это указано в px? К сожалению, я не могу найти ответ в документации.
базовой линии (в вашем посте 'b', на мой вопрос 'T') всегда нужно указывать в метрах. Единица определяется только размером шаблона калибровки? Поэтому эта информация должна храниться в значениях 'c_x, c_y' внутренней матрицы. – Jack
Да, он определяется размером шаблона. Таким образом, мера единства 'Z' (т. Е. Мм) обозначает любую единицу измерения, которую выбирают для рисунка шахматной доски. – Kornel
Но эта информация не должна храниться в матрице встроенных функций, поскольку внутренняя среда не зависит от просматриваемой сцены. Эта информация хранится в внешних параметрах, которые обозначают преобразования системы координат из трехмерных координат мира в координаты 3D-камеры. – Kornel