108 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Mathematica
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Mathematica
		
	
	
	
	
	
| #! /usr/bin/env octave
 | |
| 
 | |
| ## import the necessary things for OpenCV
 | |
| addpath("/home/x/opencv2/interfaces/swig/octave");
 | |
| source("/home/x/opencv2/interfaces/swig/octave/PKG_ADD_template");
 | |
| debug_on_error(true);
 | |
| debug_on_warning(true);
 | |
| crash_dumps_octave_core (0)
 | |
| cv;
 | |
| highgui;
 | |
| 
 | |
| ## the codec existing in cvcapp.cpp,
 | |
| ## need to have a better way to specify them in the future
 | |
| ## WARNING: I have see only MPEG1VIDEO working on my computer
 | |
| H263 = 0x33363255;
 | |
| H263I = 0x33363249;
 | |
| MSMPEG4V3 = 0x33564944;
 | |
| MPEG4 = 0x58564944;
 | |
| MSMPEG4V2 = 0x3234504D;
 | |
| MJPEG = 0x47504A4D;
 | |
| MPEG1VIDEO = 0x314D4950;
 | |
| AC3 = 0x2000;
 | |
| MP2 = 0x50;
 | |
| FLV1 = 0x31564C46;
 | |
| 
 | |
| #############################################################################
 | |
| ## so, here is the main part of the program
 | |
| 
 | |
| ## a small welcome
 | |
| printf("OpenCV Octave capture video\n");
 | |
| 
 | |
| ## first, create the necessary window
 | |
| highgui.cvNamedWindow ('Camera', highgui.CV_WINDOW_AUTOSIZE);
 | |
| 
 | |
| ## move the new window to a better place
 | |
| #highgui.cvMoveWindow ('Camera', 10, 10);
 | |
| 
 | |
| try
 | |
|   ## try to get the device number from the command line
 | |
|   device = int32 (argv(){1});
 | |
| catch
 | |
|   ## no device number on the command line, assume we want the 1st device
 | |
|   device = -1;
 | |
| end_try_catch
 | |
| 
 | |
| ## no argument on the command line, try to use the camera
 | |
| capture = highgui.cvCreateCameraCapture (device);
 | |
| 
 | |
| ## check that capture device is OK
 | |
| if (!swig_this(capture))
 | |
|   printf("Error opening capture device\n");
 | |
|   exit (1);
 | |
| endif
 | |
| 
 | |
| ## capture the 1st frame to get some propertie on it
 | |
| frame = highgui.cvQueryFrame (capture);
 | |
| 
 | |
| ## get size of the frame
 | |
| frame_size = cv.cvGetSize (frame);
 | |
| 
 | |
| ## get the frame rate of the capture device
 | |
| fps = highgui.cvGetCaptureProperty (capture, highgui.CV_CAP_PROP_FPS);
 | |
| if (fps == 0)
 | |
|   ## no fps getted, so set it to 30 by default
 | |
|   fps = 30;
 | |
| endif
 | |
| 
 | |
| ## create the writer
 | |
| writer = highgui.cvCreateVideoWriter ("captured.mpg", MPEG1VIDEO,
 | |
|                                       fps, frame_size, true);
 | |
| 
 | |
| ## check the writer is OK
 | |
| if (!swig_this(writer))
 | |
|   printf("Error opening writer\n");
 | |
|   exit(1);
 | |
| endif
 | |
| 
 | |
| while (1)
 | |
|   ## do forever
 | |
| 
 | |
|   ## 1. capture the current image
 | |
|   frame = highgui.cvQueryFrame (capture);
 | |
|   if (swig_this(frame) == 0)
 | |
|     ## no image captured... end the processing
 | |
|     break
 | |
|   endif
 | |
| 
 | |
|   ## write the frame to the output file
 | |
|   highgui.cvWriteFrame (writer, frame);
 | |
| 
 | |
|   ## display the frames to have a visual output
 | |
|   highgui.cvShowImage ('Camera', frame);
 | |
| 
 | |
|   ## handle events
 | |
|   k = highgui.cvWaitKey (5);
 | |
| 
 | |
|   if (k & 0x100 == 27)
 | |
|     ## user has press the ESC key, so exit
 | |
|     break
 | |
|   endif
 | |
| endwhile
 | |
| 
 | |
| 
 | |
| ## end working with the writer
 | |
| ## not working at this time... Need to implement some typemaps...
 | |
| ## but exiting without calling it is OK in this simple application
 | |
| ##highgui.cvReleaseVideoWriter (writer)
 | 
