-- 更新 2 --
次の記事は、単一のカメラを使用して距離を計算する場合に非常に役立ちます (ただし、C++ ではなく Python を使用しています): Python と OpenCV を使用してカメラからオブジェクト/マーカーまでの距離を見つける
最適なリンクはStereo Webcam Depth Detectionです。このオープンソース プロジェクトの実装は非常に明確です。
以下、元の質問です。
私のプロジェクトでは、2 台のカメラ (ステレオ ビジョン) を使用してオブジェクトを追跡し、距離を計算しています。それらを OpenCV のサンプルコードでキャリブレーションし、視差マップを生成しました。
色に基づいてオブジェクトを追跡する方法を既に実装しました (これにより、しきい値の画像が生成されます)。
私の質問:視差マップ/マトリックスを使用して、追跡された色付きのオブジェクトまでの距離を計算するにはどうすればよいですか?
以下に、各ピクセルの x、y、z 座標を取得するコード スニペットを示します。質問: Point.z は cm、ピクセル、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 値 (距離) を計算したいと考えています (視差マップを使用)。