comparison python/cvutils.py @ 482:f6415f012640

adding functionalities (save images directly to display trajectories to create movies
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 02 Apr 2014 16:12:24 -0400
parents d337bffd7283
children 343cfd185ca6
comparison
equal deleted inserted replaced
481:b6ad86ee7033 482:f6415f012640
200 else: 200 else:
201 imgcrop = [] 201 imgcrop = []
202 return imgcrop, yCropMin, yCropMax, xCropMin, xCropMax 202 return imgcrop, yCropMin, yCropMax, xCropMin, xCropMax
203 203
204 204
205 def displayTrajectories(videoFilename, objects, boundingBoxes = {}, homography = None, firstFrameNum = 0, lastFrameNumArg = None, printFrames = True, rescale = 1., nFramesStep = 1): 205 def displayTrajectories(videoFilename, objects, boundingBoxes = {}, homography = None, firstFrameNum = 0, lastFrameNumArg = None, printFrames = True, rescale = 1., nFramesStep = 1, saveAllImages = False):
206 '''Displays the objects overlaid frame by frame over the video ''' 206 '''Displays the objects overlaid frame by frame over the video '''
207 from moving import userTypeNames 207 from moving import userTypeNames
208 208 from math import ceil, log10
209 capture = cv2.VideoCapture(videoFilename) 209 capture = cv2.VideoCapture(videoFilename)
210 width = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)) 210 width = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH))
211 height = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)) 211 height = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT))
212 if capture.isOpened(): 212 if capture.isOpened():
213 key = -1 213 key = -1
214 ret = True 214 ret = True
215 frameNum = firstFrameNum 215 frameNum = firstFrameNum
216 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum) 216 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum)
217 if not lastFrameNumArg: 217 if lastFrameNumArg == None:
218 from sys import maxint 218 from sys import maxint
219 lastFrameNum = maxint 219 lastFrameNum = maxint
220 else: 220 else:
221 lastFrameNum = lastFrameNumArg 221 lastFrameNum = lastFrameNumArg
222 nZerosFilename = int(ceil(log10(lastFrameNum)))
222 while ret and not quitKey(key) and frameNum < lastFrameNum: 223 while ret and not quitKey(key) and frameNum < lastFrameNum:
223 ret, img = capture.read() 224 ret, img = capture.read()
224 if ret: 225 if ret:
225 if printFrames: 226 if printFrames:
226 print('frame {0}'.format(frameNum)) 227 print('frame {0}'.format(frameNum))
240 cv2.rectangle(img, (xCropMin, yCropMin), (xCropMax, yCropMax), cvBlue, 1) 241 cv2.rectangle(img, (xCropMin, yCropMin), (xCropMax, yCropMax), cvBlue, 1)
241 objDescription = '{} '.format(obj.num) 242 objDescription = '{} '.format(obj.num)
242 if userTypeNames[obj.userType] != 'unknown': 243 if userTypeNames[obj.userType] != 'unknown':
243 objDescription += userTypeNames[obj.userType][0].upper() 244 objDescription += userTypeNames[obj.userType][0].upper()
244 cv2.putText(img, objDescription, obj.projectedPositions[frameNum-obj.getFirstInstant()].asint().astuple(), cv2.cv.CV_FONT_HERSHEY_PLAIN, 1, cvRed) 245 cv2.putText(img, objDescription, obj.projectedPositions[frameNum-obj.getFirstInstant()].asint().astuple(), cv2.cv.CV_FONT_HERSHEY_PLAIN, 1, cvRed)
245 cvImshow('frame', img, rescale) 246 if not saveAllImages:
246 key = cv2.waitKey() 247 cvImshow('frame', img, rescale)
247 if saveKey(key): 248 key = cv2.waitKey()
248 cv2.imwrite('image.png', img) 249 if saveAllImages or saveKey(key):
250 cv2.imwrite('image-{{:0{}}}.png'.format(nZerosFilename).format(frameNum), img)
249 frameNum += nFramesStep 251 frameNum += nFramesStep
250 if nFramesStep > 1: 252 if nFramesStep > 1:
251 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, frameNum) 253 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, frameNum)
252 cv2.destroyAllWindows() 254 cv2.destroyAllWindows()
253 else: 255 else: