Mercurial > hg > nsaunier > traffic-intelligence
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 '''
