- 更新2 - あなたは距離を計算するために、単一のカメラを使用している場合(これは、PythonではなくC++を使用しているが)計算距離(格差)OpenCVの
次の記事は本当に便利です。Find distance from camera to object/marker using Python and 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 -
例えばI(左カメラ)この閾値化画像を生成しました。私はほぼ同じカメラを持っています。
は、上記閾値画像に加えて、アプリケーションは、視差マップを生成します。どのように視差マップ内の手のピクセルのZ座標を取得できますか?
実際に、視差マップを使用して平均Z値(距離)を計算するために、手のピクセルのすべてのZ座標を取得したいと考えています。
- 更新 - 最初の投稿を参照してください。 – Odrai