diff python/cvutils.py @ 821:26daf35180ad

finished modification and demo script to replay synchronized video (with same frame rate)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 22 Jun 2016 16:36:12 -0400
parents e73e7b644428
children 2faabcbde2c4
line wrap: on
line diff
--- a/python/cvutils.py	Wed Jun 22 15:23:20 2016 -0400
+++ b/python/cvutils.py	Wed Jun 22 16:36:12 2016 -0400
@@ -146,8 +146,11 @@
         newCameraMatrix[1,2] = newImgSize[1]/2.
         return cv2.initUndistortRectifyMap(intrinsicCameraMatrix, array(distortionCoefficients), identity(3), newCameraMatrix, newImgSize, cv2.CV_32FC1)
 
-    def playVideo(filenames, windowNames = None, firstFrameNum = 0, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1):
+    def playVideo(filenames, windowNames = None, firstFrameNums = None, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1):
         '''Plays the video(s)'''
+        if len(filenames) == 0:
+            print('Empty filename list')
+            return
         if windowNames is None:
             windowNames = ['frame{}'.format(i) for i in xrange(len(filenames))]
         wait = 5
@@ -162,9 +165,10 @@
         if array([cap.isOpened() for cap in captures]).all():
             key = -1
             ret = True
-            frameNum = firstFrameNum
-            for cap in captures:
-                cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum)
+            nFramesShown = 0
+            if firstFrameNums is not None:
+                for i in xrange(len(captures)):
+                    captures[i].set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNums[i])
             while ret and not quitKey(key):
                 rets = []
                 images = []
@@ -174,19 +178,18 @@
                     images.append(img)
                 if array(rets).all():
                     if printFrames:
-                        print('frame {0}'.format(frameNum))
-                    #if text is not None:
-                    #   cv2.putText(img, text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed)
-                    for i in xrange(1, len(filenames)):
-                        cvImshow(windowNames[i], images[i], rescale)
-                    cvImshow(windowNames[0], images[0], rescale) # cv2.imshow('frame', img)
+                        print('frame shown {0}'.format(nFramesShown))
+                    for i in xrange(len(filenames)):
+                        if text is not None:
+                            cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed)
+                        cvImshow(windowNames[i], images[i], rescale) # cv2.imshow('frame', img)
                     key = cv2.waitKey(wait)
                     if saveKey(key):
                         cv2.imwrite('image-{}.png'.format(frameNum), img)
-                    frameNum += step
+                    nFramesShown += step
                     if step > 1:
-                        for cap in captures:
-                            cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, frameNum)
+                        for i in xrange(len(captures)):
+                            captures.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNums[i]+nFramesShown)
             cv2.destroyAllWindows()
         else:
             print('Video captures for {} failed'.format(filenames))