From: Michal Vokac Date: Fri, 30 Dec 2011 14:39:22 +0000 (+0100) Subject: camera: Use 5 recognition cycles for result. X-Git-Url: https://rtime.felk.cvut.cz/gitweb/eurobot/public.git/commitdiff_plain/d15582fef04afa56f780847624175208ccbdcf04 camera: Use 5 recognition cycles for result. --- diff --git a/src/camera/barcam/barcam.cxx b/src/camera/barcam/barcam.cxx index b5fc5178..605ad38a 100644 --- a/src/camera/barcam/barcam.cxx +++ b/src/camera/barcam/barcam.cxx @@ -459,14 +459,14 @@ int recognize(IplImage* gray_frame) cvCircle(gimg, a, 3, CV_RGB(0, 0, 0), -1, 16, 0); angle = atan((double)a.x / 824); angle = (180 / M_PI) * angle; - printf("Detected code: x=%i y=%i - angle %i\n", a.x, a.y, (int)angle); + //printf("Detected code: x=%i y=%i - angle %i\n", a.x, a.y, (int)angle); } else { angle = -1; } i8angle = (int8_t)angle; } + printf("detected codes: %d\n", codesCount); cvReleaseImage(&lineImg); - return codesCount; } @@ -654,32 +654,37 @@ int modeRecognize(CvCapture* capture, CvRect *roi) if ((ret = recognizeMode_processKeys(roi_frame)) != MODE_RECOGNIZE) return ret; + + ret = 0; + + for (int i = 0; i < 5; i++) { + //get one frame from camera (do not release!) + frame = cvQueryFrame(capture); + + if (!frame) { + fprintf(stderr, "NULL frame\n"); + usleep(100*1000); + continue; + } else if (orte.camera_result.error & camera_ERR_NO_FRAME) { + orte.camera_result.error &= ~camera_ERR_NO_FRAME; + ORTEPublicationSend(orte.publication_camera_result); + } + + // set region of interest on captured image + cvSetImageROI(frame, *roi); - //get one frame from camera (do not release!) - frame = cvQueryFrame(capture); - - if (!frame) { - fprintf(stderr, "NULL frame\n"); - usleep(100*1000); - continue; - } else if (orte.camera_result.error & camera_ERR_NO_FRAME) { - orte.camera_result.error &= ~camera_ERR_NO_FRAME; - ORTEPublicationSend(orte.publication_camera_result); - } - - // set region of interest on captured image - cvSetImageROI(frame, *roi); - - // copy ROI part of captured image to roi_frame and convert to grayscale - cvCvtColor(frame, roi_frame, CV_BGR2GRAY); + // copy ROI part of captured image to roi_frame and convert to grayscale + cvCvtColor(frame, roi_frame, CV_BGR2GRAY); - //TODO call image processing (do something useful with the image, FFT atc.) - ret = recognize(roi_frame); + //TODO call image processing (do something useful with the image, FFT atc.) + ret += recognize(roi_frame); - displayFrames(WINDOW_ORIG, frame); - displayFrames(WINDOW_PROD, roi_frame); + displayFrames(WINDOW_ORIG, frame); + displayFrames(WINDOW_PROD, roi_frame); + } // publish results + printf("return: %d\n", ret); orte.camera_result.target_valid = ret; orte.camera_result.data_valid = true; ORTEPublicationSend(orte.publication_camera_result);