diff python/cvutils.py @ 824:28526917a583

merged
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Mon, 27 Jun 2016 16:19:34 -0400
parents 26daf35180ad
children 2faabcbde2c4
line wrap: on
line diff
--- a/python/cvutils.py	Mon Jun 27 16:19:06 2016 -0400
+++ b/python/cvutils.py	Mon Jun 27 16:19:34 2016 -0400
@@ -146,39 +146,53 @@
         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., step = 1):
-        '''Plays the video'''
-        windowName = 'frame'
+    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
         if rescale == 1.:
-            cv2.namedWindow(windowName, cv2.WINDOW_NORMAL)
+            for windowName in windowNames:
+                cv2.namedWindow(windowName, cv2.WINDOW_NORMAL)
         if frameRate > 0:
             wait = int(round(1000./frameRate))
         if interactive:
             wait = 0
-        capture = cv2.VideoCapture(filename)
-        if capture.isOpened():
+        captures = [cv2.VideoCapture(fn) for fn in filenames]
+        if array([cap.isOpened() for cap in captures]).all():
             key = -1
             ret = True
-            frameNum = firstFrameNum
-            capture.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):
-                ret, img = capture.read()
-                if ret:
+                rets = []
+                images = []
+                for cap in captures:
+                    ret, img = cap.read()
+                    rets.append(ret)
+                    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)
-                    cv2.imshow('frame', img)#cvImshow(windowName, img, rescale)
+                        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:
-                        capture.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 capture for {} failed'.format(filename))
+            print('Video captures for {} failed'.format(filenames))
 
     def infoVideo(filename):
         '''Provides all available info on video '''