]> rtime.felk.cvut.cz Git - eurobot/public.git/commitdiff
camera: Use 5 recognition cycles for result.
authorMichal Vokac <vokac.m@gmail.com>
Fri, 30 Dec 2011 14:39:22 +0000 (15:39 +0100)
committerMichal Vokac <vokac.m@gmail.com>
Fri, 30 Dec 2011 14:39:22 +0000 (15:39 +0100)
src/camera/barcam/barcam.cxx

index b5fc5178696df24afc17f40eebaf74934a0ac0f2..605ad38adff52402d0bd1b8d89bc48d0e9b12826 100644 (file)
@@ -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);