- Aggiornamento 2-Calcolare la distanza (disparità) OpenCV
Il seguente articolo è veramente utile (anche se sta usando Python invece di C++) se si utilizza una sola telecamera per calcolare la distanza: Find distance from camera to object/marker using Python and OpenCV
migliore collegamento è Stereo Webcam Depth Detection. L'implementazione di questo progetto open source è molto chiara.
Di seguito è la domanda originale.
Per il mio progetto, utilizzo due telecamere (visione stereo) per tracciare gli oggetti e calcolare la distanza. Li ho calibrati con il codice di esempio di OpenCV e generato una mappa di disparità.
Ho già implementato un metodo per tracciare gli oggetti in base al colore (questo genera un'immagine di soglia).
La mia domanda: come posso calcolare la distanza dagli oggetti colorati tracciati usando la mappa/matrice di disparità?
Di seguito è riportato uno snippet di codice che ottiene le coordinate x, yez di ciascun pixel. La domanda: Point.z è in cm, pixel, mm?
Posso ottenere la distanza dall'oggetto monitorato con questo codice?
Grazie in anticipo!
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);
- Update 1 -
Per esempio ho generato questa immagine thresholded (della telecamera a sinistra). Quasi ho lo stesso della fotocamera giusta.
Oltre dell'immagine soglia sopra, l'applicazione genera una mappa disparità. Come posso ottenere le coordinate Z dei pixel della mano nella mappa disparità?
In realtà voglio ottenere tutte le coordinate Z dei pixel della mano per calcolare il valore Z medio (distanza) (utilizzando la mappa disparità).
Vedere --Aggiornamento - nel primo post. – Odrai