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