- Mise à jour 2-distance Calculer (écart) OpenCV
L'article suivant est vraiment utile (bien qu'il utilise à la place Python de C++) si vous utilisez une seule caméra pour calculer la distance: Find distance from camera to object/marker using Python and OpenCV
Meilleur lien est Stereo Webcam Depth Detection. L'implémentation de ce projet open source est vraiment claire.
Voici la question originale. Pour mon projet, j'utilise deux caméras (vision stéréoscopique) pour suivre des objets et calculer la distance. Je les ai calibrés avec l'exemple de code d'OpenCV et j'ai généré une carte de disparité.
J'ai déjà mis en œuvre une méthode pour suivre les objets basés sur la couleur (cela génère une image de seuil).
Ma question: Comment puis-je calculer la distance aux objets colorés suivis à l'aide de la carte/matrice de disparité?
Ci-dessous vous pouvez trouver un extrait de code qui obtient les coordonnées x, y et z de chaque pixel. La question: Est-ce que Point.z est en cm, pixels, mm? Puis-je obtenir la distance de l'objet suivi avec ce code?
Merci d'avance!
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);
- Mise à jour 1 -
Par exemple, je généré cette image seuillée (de la caméra à gauche). J'ai presque la même chose de la bonne caméra.
Outre l'image de seuil haut, l'application génère une carte de disparité. Comment puis-je obtenir les coordonnées Z des pixels de la main dans la carte de disparité?
En fait, je veux obtenir toutes les coordonnées Z des pixels de la main pour calculer la valeur Z moyenne (distance) (en utilisant la carte de disparité).
Voir --Mise à jour-- dans le premier message. – Odrai