示例#1
0
//------------------------------------------------------------------------
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;
	}
}
示例#2
0
//------------------------------------------------------------------------
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);
}