- Обновление 2 -
Следующая статья действительно полезна (хотя в ней используется Python вместо C ++), если вы используете одну камеру для расчета расстояния: Найти расстояние от камеры до объекта / маркера с помощью Python и OpenCV
Лучшая ссылка: Глубина стерео веб-камеры Обнаружение. Реализация этого проекта с открытым исходным кодом действительно очевидна.
Ниже исходный вопрос.
В своем проекте я использую две камеры (стереовидение) для отслеживания объектов и расчета расстояния. Я откалибровал их с помощью образца кода OpenCV и создал карту несоответствия.
Я уже реализовал метод отслеживания объектов на основе цвета (это создает пороговое изображение).
Мой вопрос: как я могу рассчитать расстояние до отслеживаемых цветных объектов с помощью карты / матрицы диспаратности?
Ниже вы можете найти фрагмент кода, который получает координаты x, y и z каждого пикселя. Вопрос: Point.z в сантиметрах, пикселях, миллиметрах?
Могу ли я узнать расстояние до отслеживаемого объекта с помощью этого кода?
Заранее спасибо!
cvReprojectImageTo3D(disparity, Image3D, _Q);
vector<CvPoint3D32f> PointArray;
CvPoint3D32f Point;
for (int y = 0; y < Image3D->rows; y++) {
float *data = (float *)(Image3D->data.ptr + y * Image3D->step);
for (int x = 0; x < Image3D->cols * 3; x = x + 3)
{
Point.x = data[x];
Point.y = data[x+1];
Point.z = data[x+2];
PointArray.push_back(Point);
//Depth > 10
if(Point.z > 10)
{
printf("%f %f %f", Point.x, Point.y, Point.z);
}
}
}
cvReleaseMat(&Image3D);
- Обновление 1 -
Например, я создал это пороговое изображение (левой камеры). У меня почти такая же правая камера.
Помимо приведенного выше порогового изображения, приложение создает карту несоответствия. Как я могу получить Z-координаты пикселей руки на карте диспаратности?
Я действительно хочу получить все Z-координаты пикселей руки, чтобы вычислить среднее Z-значение (расстояние) (с использованием карты диспаратности).