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)
 |