Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Calculate distance (stereo vision)

For my project I am using parts of the next code: link.

To track objects of a specific color I implemented this method:

My question is: How can I calculate the distance to the tracked colored objects?

Thank you in advance!

*The application calls the method for the left and right frame. This is not efficient...

**I need to calculate 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; }

Calculate distance (stereo vision)

For my project I am using parts of the next code: link.

To track objects of a specific color I implemented this method:

My question is: How can I calculate the distance to the tracked colored objects?

Thank you in advance!

*The application calls the method for the left and right frame. This is not efficient...

**I need to calculate detectedObject.Zcor

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

color color_image = frame;

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

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

cvSetZero(imgdraw); cvFlip(color_image, color_image, 1);

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

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

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

= cvCreateImage(cvGetSize(color_image),8,3); for(; contours!=0; contours = contours->h_next) = 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,
&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;

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; }

Calculate distance (stereo vision)

For my project I am using parts of the next code: link.

link text

To track objects of a specific color I implemented this method:

My question is: How can I calculate the distance to the tracked colored objects?

Thank you in advance!

*The application calls the method for the left and right frame. This is not efficient...

**I need to calculate 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;