Update to 2.0.0 tree from current Fremantle build
[opencv] / samples / swig_python / capture-cam.py
diff --git a/samples/swig_python/capture-cam.py b/samples/swig_python/capture-cam.py
new file mode 100755 (executable)
index 0000000..2f261ca
--- /dev/null
@@ -0,0 +1,106 @@
+#! /usr/bin/env python
+
+import sys
+
+# import the necessary things for OpenCV
+from opencv import cv
+from opencv import 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
+
+if __name__ == '__main__':
+
+    # a small welcome
+    print "OpenCV Python capture video"
+
+    # 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 = int (sys.argv [1])
+
+        # got it ! so remove it from the arguments
+        del sys.argv [1]
+    except (IndexError, ValueError):
+        # no device number on the command line, assume we want the 1st device
+        device = 0
+
+    if len (sys.argv) == 1:
+        # no argument on the command line, try to use the camera
+        capture = highgui.cvCreateCameraCapture (device)
+    else:
+        # we have an argument on the command line,
+        # we can assume this is a file name, so open it
+        capture = highgui.cvCreateFileCapture (sys.argv [1])            
+
+    # check that capture device is OK
+    if not capture:
+        print "Error opening capture device"
+        sys.exit (1)
+
+    # 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
+
+    # create the writer
+    writer = highgui.cvCreateVideoWriter ("captured.mpg", MPEG1VIDEO,
+                                          fps, frame_size, True)
+
+    # check the writer is OK
+    if not writer:
+        print "Error opening writer"
+        sys.exit (1)
+        
+    while 1:
+        # do forever
+
+        # 1. capture the current image
+        frame = highgui.cvQueryFrame (capture)
+        if frame is None:
+            # no image captured... end the processing
+            break
+
+        # 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
+
+    # 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)