diff python/cvutils.py @ 657:51269511229b

added script printing video info
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 13 May 2015 17:24:19 +0200
parents 4e7925cb4f8f
children 6668f541b915
line wrap: on
line diff
--- a/python/cvutils.py	Wed May 13 15:11:03 2015 +0200
+++ b/python/cvutils.py	Wed May 13 17:24:19 2015 +0200
@@ -36,6 +36,12 @@
 def saveKey(key):
     return chr(key&255) == 's'
 
+def int2FOURCC(x):
+    fourcc = ''
+    for i in xrange(4):
+        fourcc += unichr((x >> 8*i)&255)
+    return fourcc
+
 def plotLines(filename, origins, destinations, w = 1, resultFilename='image.png'):
     '''Draws lines over the image '''
     import Image, ImageDraw # PIL
@@ -119,7 +125,7 @@
         newCameraMatrix[1,2] = newImgSize[1]/2.
         return cv2.initUndistortRectifyMap(intrinsicCameraMatrix, array(distortionCoefficients), identity(3), newCameraMatrix, newImgSize, cv2.CV_32FC1)
 
-    def playVideo(filename, firstFrameNum = 0, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1.):
+    def playVideo(filename, firstFrameNum = 0, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1):
         '''Plays the video'''
         windowName = 'frame'
         cv2.namedWindow(windowName, cv2.WINDOW_NORMAL)
@@ -135,11 +141,13 @@
             frameNum = firstFrameNum
             capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum)
             while ret and not quitKey(key):
-                ret, img = capture.read()
+                #ret, img = capture.read()
+                for i in xrange(step):
+                    ret, img = capture.read()
                 if ret:
                     if printFrames:
                         print('frame {0}'.format(frameNum))
-                    frameNum+=1
+                    frameNum+=step
                     if text is not None:
                        cv2.putText(img, text, (10,50), cv2.cv.CV_FONT_HERSHEY_PLAIN, 1, cvRed) 
                     cvImshow(windowName, img, rescale)
@@ -150,6 +158,44 @@
         else:
             print('Video capture for {} failed'.format(filename))
 
+    def infoVideo(filename):
+        '''Provides all available info on video '''
+        cvPropertyNames = {cv2.cv.CV_CAP_PROP_FORMAT: "format",
+                           cv2.cv.CV_CAP_PROP_FOURCC: "codec (fourcc)",
+                           cv2.cv.CV_CAP_PROP_FPS: "fps",
+                           cv2.cv.CV_CAP_PROP_FRAME_COUNT: "number of frames",
+                           cv2.cv.CV_CAP_PROP_FRAME_HEIGHT: "heigh",
+                           cv2.cv.CV_CAP_PROP_FRAME_WIDTH: "width",
+                           cv2.cv.CV_CAP_PROP_RECTIFICATION: "rectification",
+                           cv2.cv.CV_CAP_PROP_SATURATION: "saturation"}
+        capture = cv2.VideoCapture(filename)
+        if capture.isOpened():
+            for cvprop in [#cv2.cv.CV_CAP_PROP_BRIGHTNESS
+                    #cv2.cv.CV_CAP_PROP_CONTRAST
+                    #cv2.cv.CV_CAP_PROP_CONVERT_RGB
+                    #cv2.cv.CV_CAP_PROP_EXPOSURE
+                    cv2.cv.CV_CAP_PROP_FORMAT,
+                    cv2.cv.CV_CAP_PROP_FOURCC,
+                    cv2.cv.CV_CAP_PROP_FPS,
+                    cv2.cv.CV_CAP_PROP_FRAME_COUNT,
+                    cv2.cv.CV_CAP_PROP_FRAME_HEIGHT,
+                    cv2.cv.CV_CAP_PROP_FRAME_WIDTH,
+                    #cv2.cv.CV_CAP_PROP_GAIN,
+                    #cv2.cv.CV_CAP_PROP_HUE
+                    #cv2.cv.CV_CAP_PROP_MODE
+                    #cv2.cv.CV_CAP_PROP_POS_AVI_RATIO
+                    #cv2.cv.CV_CAP_PROP_POS_FRAMES
+                    #cv2.cv.CV_CAP_PROP_POS_MSEC
+                    #cv2.cv.CV_CAP_PROP_RECTIFICATION,
+                    #cv2.cv.CV_CAP_PROP_SATURATION
+            ]:
+                prop = capture.get(cvprop)
+                if cvprop == cv2.cv.CV_CAP_PROP_FOURCC and prop > 0:
+                    prop = int2FOURCC(int(prop))
+                print('Video {}: {}'.format(cvPropertyNames[cvprop], prop))
+        else:
+            print('Video capture for {} failed'.format(filename))
+
     def getImagesFromVideo(videoFilename, firstFrameNum = 0, nFrames = 1, saveImage = False, outputPrefix = 'image'):
         '''Returns nFrames images from the video sequence'''
         from math import floor, log10