2013-05-28 3 views
0

Для моего проекта я использую некоторые части следующего кода: link.OpenCV расчет расстояния (стерео зрения)

Для отслеживания объектов определенного цвета я реализовал этот метод:

Мой вопрос: Как я могу вычислить расстояние до отслеживаемых цветных объектов?

Спасибо заранее!

* Приложение вызывает метод для левого и правого кадров. Это не является эффективным ... ** Мне нужно вычислить detectedObject.Zcor

DetectedObject Detect(IplImage *frame) 
{ 
//Track object (left frame and right frame) 
//Calculate average position 
//Show X,Y,Z coordinate and detected color 

color_image = frame; 

imgThreshold = cvCreateImage(cvSize(color_image->width,color_image->height), IPL_DEPTH_8U, 1); 
cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, 1, 1, 0, 1.4f, CV_AA); 

imgdraw = cvCreateImage(cvGetSize(color_image),8,3); 
cvSetZero(imgdraw); 

cvFlip(color_image, color_image, 1); 

cvSmooth(color_image, color_image, CV_GAUSSIAN, 3, 0); 

threshold = getThreshold(color_image); 
cvErode(threshold, threshold, NULL, 3); 
cvDilate(threshold, threshold, NULL, 10); 
imgThreshold = cvCloneImage(threshold); 

storage = cvCreateMemStorage(0); 
contours = cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint), storage); 
cvFindContours(threshold, storage, &contours, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE, cvPoint(0,0)); 
final = cvCreateImage(cvGetSize(color_image),8,3); 

for(; contours!=0; contours = contours->h_next) 
{ 
    CvRect rect = cvBoundingRect(contours, 0); 

    cvRectangle(color_image, 
     cvPoint(rect.x, rect.y), 
     cvPoint(rect.x+rect.width, rect.y+rect.height), 
     cvScalar(0,0,255,0), 
     2,8,0); 

    string s = to_string(rect.x) + "," + to_string(rect.y); 
    char const* pchar = s.c_str(); 

    cvPutText(frame, pchar, cvPoint(rect.x, rect.y), &font, cvScalar(0,0,255,0)); 
    detectedObject.Xcor = rect.x; 
    detectedObject.Ycor = rect.y; 
} 

cvShowImage("Threshold", imgThreshold); 

cvAdd(final,imgdraw,final); 
detectedObject.Zcor = 0; 
return detectedObject; 

}

ответ

0

Для оценки глубины вам потребуется калиброванный стереопара (известные матрицы камеры для обоих слева и справа камеры). Затем, используя матрицы камеры и соответствующие точки/контуры в стереопаре, вы можете вычислить глубину.