Mercurial Hosting > traffic-intelligence
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