//------------------------------------------------------------------------ void ofxFern::detect(IplImage * frame){ // do we need to detect the marker? if(!bDetected){ detector->detect(frame); // found the marker? if(detector->pattern_is_detected){ bDetected = true; tracker->initialize(detector->detected_u_corner[0], detector->detected_v_corner[0], detector->detected_u_corner[1], detector->detected_v_corner[1], detector->detected_u_corner[2], detector->detected_v_corner[2], detector->detected_u_corner[3], detector->detected_v_corner[3]); } else{ // nope bDetected = false; trackedMarker.tracked = false; tracker->initialize(); if(show_keypoints) { draw_detected_keypoints(frame, detector); } return; } } // track the marker if it was detected if(bDetected){ // is the marker being tracked? if(tracker->track(frame)){ if(show_keypoints) { draw_detected_keypoints(frame, detector); draw_recognized_keypoints(frame, detector); } setTrackedMarker(tracker); draw_tracked_position(frame, tracker); if(show_tracked_locations) draw_tracked_locations(frame, tracker); } else { // nope if(show_keypoints) { draw_detected_keypoints(frame, detector); draw_recognized_keypoints(frame, detector); } setTrackedMarker(detector); draw_detected_position(frame, detector); bDetected = false; } } else{ tracker->initialize(); if(show_keypoints) { draw_detected_keypoints(frame, detector); } //draw_initial_rectangle(frame, tracker); trackedMarker.tracked = false; } }
//------------------------------------------------------------------------ IplImage * ofxFern::detect(IplImage * frame){ static bool last_frame_ok=false; if (mode == 1 || ((mode==0) && last_frame_ok)) { bool ok = tracker->track(frame); last_frame_ok=ok; if (!ok) { if (mode==0) return detect(frame); else { draw_initial_rectangle(frame, tracker); tracker->initialize(); } } else { draw_tracked_position(frame, tracker); if (show_tracked_locations) draw_tracked_locations(frame, tracker); } //cvPutText(frame, "template-based 3D tracking", cvPoint(10, 30), &font, cvScalar(255, 255, 255)); } else { detector->detect(frame); if (detector->pattern_is_detected) { last_frame_ok=true; tracker->initialize(detector->detected_u_corner[0], detector->detected_v_corner[0], detector->detected_u_corner[1], detector->detected_v_corner[1], detector->detected_u_corner[2], detector->detected_v_corner[2], detector->detected_u_corner[3], detector->detected_v_corner[3]); if (mode == 3 && tracker->track(frame)) { if (show_keypoints) { draw_detected_keypoints(frame, detector); draw_recognized_keypoints(frame, detector); } draw_tracked_position(frame, tracker); if (show_tracked_locations) draw_tracked_locations(frame, tracker); ;//cvPutText(frame, "detection+template-based 3D tracking", cvPoint(10, 30), &font, cvScalar(255, 255, 255)); } else { if (show_keypoints) { draw_detected_keypoints(frame, detector); draw_recognized_keypoints(frame, detector); } draw_detected_position(frame, detector); ;//cvPutText(frame, "detection", cvPoint(10, 30), &font, cvScalar(255, 255, 255)); } } else { last_frame_ok=false; if (show_keypoints) draw_detected_keypoints(frame, detector); if (mode == 3) ;//cvPutText(frame, "detection + template-based 3D tracking", cvPoint(10, 30), &font, cvScalar(255, 255, 255)); else ;//cvPutText(frame, "detection", cvPoint(10, 30), &font, cvScalar(255, 255, 255)); } } //cvShowImage("ferns-demo", frame); }