- Update 2 -Вычислить расстояние (неравенство) OpenCV
Следующая статья очень полезна (хотя он использует Python вместо C++), если вы используете одну камеру, чтобы вычислить расстояние: Find distance from camera to object/marker using Python and OpenCV
Лучший ссылка является Stereo Webcam Depth Detection. Реализация этого проекта с открытым исходным кодом действительно понятна.
Ниже приведен оригинальный вопрос.
Для моего проекта я использую две камеры (стерео зрение) для отслеживания объектов и расчета расстояния. Я откалибровал их с образцом кода OpenCV и создал карту несоответствий.
Я уже реализовал метод отслеживания объектов на основе цвета (это создает пороговое изображение).
Мой вопрос: как я могу рассчитать расстояние до отслеживаемых цветных объектов с помощью карты/матрицы несоответствия?
Ниже вы можете найти фрагмент кода, который получает координаты x, y и z для каждого пикселя. Вопрос: Is Point.z в cm, pixels, mm?
Могу ли я получить расстояние до отслеживаемого объекта с помощью этого кода?
Спасибо заранее!
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 (расстояние) (используя карту несоответствий).
См. - Обновление в первом сообщении. – Odrai