Mercurial > hg > nsaunier > traffic-intelligence
comparison python/cvutils.py @ 807:52aa03260f03 opencv3
reversed all code to OpenCV 2.4.13
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Fri, 10 Jun 2016 15:26:19 -0400 |
| parents | 0662c87a61c9 |
| children | e73e7b644428 |
comparison
equal
deleted
inserted
replaced
| 806:c6f497291fd8 | 807:52aa03260f03 |
|---|---|
| 147 return cv2.initUndistortRectifyMap(intrinsicCameraMatrix, array(distortionCoefficients), identity(3), newCameraMatrix, newImgSize, cv2.CV_32FC1) | 147 return cv2.initUndistortRectifyMap(intrinsicCameraMatrix, array(distortionCoefficients), identity(3), newCameraMatrix, newImgSize, cv2.CV_32FC1) |
| 148 | 148 |
| 149 def playVideo(filename, firstFrameNum = 0, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1): | 149 def playVideo(filename, firstFrameNum = 0, frameRate = -1, interactive = False, printFrames = True, text = None, rescale = 1., step = 1): |
| 150 '''Plays the video''' | 150 '''Plays the video''' |
| 151 windowName = 'frame' | 151 windowName = 'frame' |
| 152 wait = 5 | |
| 152 if rescale == 1.: | 153 if rescale == 1.: |
| 153 cv2.namedWindow(windowName, cv2.WINDOW_NORMAL) | 154 cv2.namedWindow(windowName, cv2.WINDOW_NORMAL) |
| 154 wait = 5 | |
| 155 if frameRate > 0: | 155 if frameRate > 0: |
| 156 wait = int(round(1000./frameRate)) | 156 wait = int(round(1000./frameRate)) |
| 157 if interactive: | 157 if interactive: |
| 158 wait = 0 | 158 wait = 0 |
| 159 capture = cv2.VideoCapture(filename) | 159 capture = cv2.VideoCapture(filename) |
| 160 if capture.isOpened(): | 160 if capture.isOpened(): |
| 161 key = -1 | 161 key = -1 |
| 162 ret = True | 162 ret = True |
| 163 frameNum = firstFrameNum | 163 frameNum = firstFrameNum |
| 164 capture.set(cv2.CAP_PROP_POS_FRAMES, firstFrameNum) | 164 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum) |
| 165 while ret and not quitKey(key): | 165 while ret and not quitKey(key): |
| 166 #ret, img = capture.read() | 166 ret, img = capture.read() |
| 167 for i in xrange(step): | |
| 168 ret, img = capture.read() | |
| 169 if ret: | 167 if ret: |
| 170 if printFrames: | 168 if printFrames: |
| 171 print('frame {0}'.format(frameNum)) | 169 print('frame {0}'.format(frameNum)) |
| 172 frameNum+=step | |
| 173 if text is not None: | 170 if text is not None: |
| 174 cv2.putText(img, text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) | 171 cv2.putText(img, text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) |
| 175 cvImshow(windowName, img, rescale) | 172 cv2.imshow('frame', img)#cvImshow(windowName, img, rescale) |
| 176 key = cv2.waitKey(wait) | 173 key = cv2.waitKey(wait) |
| 177 if saveKey(key): | 174 if saveKey(key): |
| 178 cv2.imwrite('image-{}.png'.format(frameNum), img) | 175 cv2.imwrite('image-{}.png'.format(frameNum), img) |
| 176 frameNum += step | |
| 177 if step > 1: | |
| 178 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, frameNum) | |
| 179 cv2.destroyAllWindows() | 179 cv2.destroyAllWindows() |
| 180 else: | 180 else: |
| 181 print('Video capture for {} failed'.format(filename)) | 181 print('Video capture for {} failed'.format(filename)) |
| 182 | 182 |
| 183 def infoVideo(filename): | 183 def infoVideo(filename): |
| 184 '''Provides all available info on video ''' | 184 '''Provides all available info on video ''' |
| 185 cvPropertyNames = {cv2.CAP_PROP_FORMAT: "format", | 185 cvPropertyNames = {cv2.cv.CV_CAP_PROP_FORMAT: "format", |
| 186 cv2.CAP_PROP_FOURCC: "codec (fourcc)", | 186 cv2.cv.CV_CAP_PROP_FOURCC: "codec (fourcc)", |
| 187 cv2.CAP_PROP_FPS: "fps", | 187 cv2.cv.CV_CAP_PROP_FPS: "fps", |
| 188 cv2.CAP_PROP_FRAME_COUNT: "number of frames", | 188 cv2.cv.CV_CAP_PROP_FRAME_COUNT: "number of frames", |
| 189 cv2.CAP_PROP_FRAME_HEIGHT: "heigh", | 189 cv2.cv.CV_CAP_PROP_FRAME_HEIGHT: "heigh", |
| 190 cv2.CAP_PROP_FRAME_WIDTH: "width", | 190 cv2.cv.CV_CAP_PROP_FRAME_WIDTH: "width", |
| 191 cv2.CAP_PROP_RECTIFICATION: "rectification", | 191 cv2.cv.CV_CAP_PROP_RECTIFICATION: "rectification", |
| 192 cv2.CAP_PROP_SATURATION: "saturation"} | 192 cv2.cv.CV_CAP_PROP_SATURATION: "saturation"} |
| 193 capture = cv2.VideoCapture(filename) | 193 capture = cv2.VideoCapture(filename) |
| 194 if capture.isOpened(): | 194 if capture.isOpened(): |
| 195 for cvprop in [#cv2.CAP_PROP_BRIGHTNESS | 195 for cvprop in [#cv2.cv.CV_CAP_PROP_BRIGHTNESS |
| 196 #cv2.CAP_PROP_CONTRAST | 196 #cv2.cv.CV_CAP_PROP_CONTRAST |
| 197 #cv2.CAP_PROP_CONVERT_RGB | 197 #cv2.cv.CV_CAP_PROP_CONVERT_RGB |
| 198 #cv2.CAP_PROP_EXPOSURE | 198 #cv2.cv.CV_CAP_PROP_EXPOSURE |
| 199 cv2.CAP_PROP_FORMAT, | 199 cv2.cv.CV_CAP_PROP_FORMAT, |
| 200 cv2.CAP_PROP_FOURCC, | 200 cv2.cv.CV_CAP_PROP_FOURCC, |
| 201 cv2.CAP_PROP_FPS, | 201 cv2.cv.CV_CAP_PROP_FPS, |
| 202 cv2.CAP_PROP_FRAME_COUNT, | 202 cv2.cv.CV_CAP_PROP_FRAME_COUNT, |
| 203 cv2.CAP_PROP_FRAME_HEIGHT, | 203 cv2.cv.CV_CAP_PROP_FRAME_HEIGHT, |
| 204 cv2.CAP_PROP_FRAME_WIDTH, | 204 cv2.cv.CV_CAP_PROP_FRAME_WIDTH, |
| 205 #cv2.CAP_PROP_GAIN, | 205 #cv2.cv.CV_CAP_PROP_GAIN, |
| 206 #cv2.CAP_PROP_HUE | 206 #cv2.cv.CV_CAP_PROP_HUE |
| 207 #cv2.CAP_PROP_MODE | 207 #cv2.cv.CV_CAP_PROP_MODE |
| 208 #cv2.CAP_PROP_POS_AVI_RATIO | 208 #cv2.cv.CV_CAP_PROP_POS_AVI_RATIO |
| 209 #cv2.CAP_PROP_POS_FRAMES | 209 #cv2.cv.CV_CAP_PROP_POS_FRAMES |
| 210 #cv2.CAP_PROP_POS_MSEC | 210 #cv2.cv.CV_CAP_PROP_POS_MSEC |
| 211 #cv2.CAP_PROP_RECTIFICATION, | 211 #cv2.cv.CV_CAP_PROP_RECTIFICATION, |
| 212 #cv2.CAP_PROP_SATURATION | 212 #cv2.cv.CV_CAP_PROP_SATURATION |
| 213 ]: | 213 ]: |
| 214 prop = capture.get(cvprop) | 214 prop = capture.get(cvprop) |
| 215 if cvprop == cv2.CAP_PROP_FOURCC and prop > 0: | 215 if cvprop == cv2.cv.CV_CAP_PROP_FOURCC and prop > 0: |
| 216 prop = int2FOURCC(int(prop)) | 216 prop = int2FOURCC(int(prop)) |
| 217 print('Video {}: {}'.format(cvPropertyNames[cvprop], prop)) | 217 print('Video {}: {}'.format(cvPropertyNames[cvprop], prop)) |
| 218 else: | 218 else: |
| 219 print('Video capture for {} failed'.format(filename)) | 219 print('Video capture for {} failed'.format(filename)) |
| 220 | 220 |
| 221 def getImagesFromVideo(videoFilename, firstFrameNum = 0, lastFrameNum = 1, step = 1, saveImage = False, outputPrefix = 'image'): | 221 def getImagesFromVideo(videoFilename, firstFrameNum = 0, lastFrameNum = 1, step = 1, saveImage = False, outputPrefix = 'image'): |
| 222 '''Returns nFrames images from the video sequence''' | 222 '''Returns nFrames images from the video sequence''' |
| 223 images = [] | 223 images = [] |
| 224 capture = cv2.VideoCapture(videoFilename) | 224 capture = cv2.VideoCapture(videoFilename) |
| 225 if capture.isOpened(): | 225 if capture.isOpened(): |
| 226 rawCount = capture.get(cv2.CAP_PROP_FRAME_COUNT) | 226 rawCount = capture.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT) |
| 227 if rawCount < 0: | 227 if rawCount < 0: |
| 228 rawCount = lastFrameNum+1 | 228 rawCount = lastFrameNum+1 |
| 229 nDigits = int(floor(log10(rawCount)))+1 | 229 nDigits = int(floor(log10(rawCount)))+1 |
| 230 ret = False | 230 ret = False |
| 231 capture.set(cv2.CAP_PROP_POS_FRAMES, firstFrameNum) | 231 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum) |
| 232 frameNum = firstFrameNum | 232 frameNum = firstFrameNum |
| 233 while frameNum<=lastFrameNum and frameNum<rawCount: | 233 while frameNum<=lastFrameNum and frameNum<rawCount: |
| 234 ret, img = capture.read() | 234 ret, img = capture.read() |
| 235 i = 0 | 235 i = 0 |
| 236 while not ret and i<10: | 236 while not ret and i<10: |
| 242 cv2.imwrite(outputPrefix+frameNumStr+'.png', img) | 242 cv2.imwrite(outputPrefix+frameNumStr+'.png', img) |
| 243 else: | 243 else: |
| 244 images.append(img) | 244 images.append(img) |
| 245 frameNum +=step | 245 frameNum +=step |
| 246 if step > 1: | 246 if step > 1: |
| 247 capture.set(cv2.CAP_PROP_POS_FRAMES, frameNum) | 247 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, frameNum) |
| 248 capture.release() | 248 capture.release() |
| 249 else: | 249 else: |
| 250 print('Video capture for {} failed'.format(videoFilename)) | 250 print('Video capture for {} failed'.format(videoFilename)) |
| 251 return images | 251 return images |
| 252 | 252 |
| 253 def getFPS(videoFilename): | 253 def getFPS(videoFilename): |
| 254 capture = cv2.VideoCapture(videoFilename) | 254 capture = cv2.VideoCapture(videoFilename) |
| 255 if capture.isOpened(): | 255 if capture.isOpened(): |
| 256 fps = capture.get(cv2.CAP_PROP_FPS) | 256 fps = capture.get(cv2.cv.CV_CAP_PROP_FPS) |
| 257 capture.release() | 257 capture.release() |
| 258 return fps | 258 return fps |
| 259 else: | 259 else: |
| 260 print('Video capture for {} failed'.format(videoFilename)) | 260 print('Video capture for {} failed'.format(videoFilename)) |
| 261 return None | 261 return None |
| 289 | 289 |
| 290 | 290 |
| 291 def displayTrajectories(videoFilename, objects, boundingBoxes = {}, homography = None, firstFrameNum = 0, lastFrameNumArg = None, printFrames = True, rescale = 1., nFramesStep = 1, saveAllImages = False, undistort = False, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = 1., annotations = [], gtMatches = {}, toMatches = {}): | 291 def displayTrajectories(videoFilename, objects, boundingBoxes = {}, homography = None, firstFrameNum = 0, lastFrameNumArg = None, printFrames = True, rescale = 1., nFramesStep = 1, saveAllImages = False, undistort = False, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = 1., annotations = [], gtMatches = {}, toMatches = {}): |
| 292 '''Displays the objects overlaid frame by frame over the video ''' | 292 '''Displays the objects overlaid frame by frame over the video ''' |
| 293 capture = cv2.VideoCapture(videoFilename) | 293 capture = cv2.VideoCapture(videoFilename) |
| 294 width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)) | 294 width = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)) |
| 295 height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) | 295 height = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)) |
| 296 | 296 |
| 297 windowName = 'frame' | 297 windowName = 'frame' |
| 298 if rescale == 1.: | 298 if rescale == 1.: |
| 299 cv2.namedWindow(windowName, cv2.WINDOW_NORMAL) | 299 cv2.namedWindow(windowName, cv2.WINDOW_NORMAL) |
| 300 | 300 |
| 302 [map1, map2] = computeUndistortMaps(width, height, undistortedImageMultiplication, intrinsicCameraMatrix, distortionCoefficients) | 302 [map1, map2] = computeUndistortMaps(width, height, undistortedImageMultiplication, intrinsicCameraMatrix, distortionCoefficients) |
| 303 if capture.isOpened(): | 303 if capture.isOpened(): |
| 304 key = -1 | 304 key = -1 |
| 305 ret = True | 305 ret = True |
| 306 frameNum = firstFrameNum | 306 frameNum = firstFrameNum |
| 307 capture.set(cv2.CAP_PROP_POS_FRAMES, firstFrameNum) | 307 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum) |
| 308 if lastFrameNumArg is None: | 308 if lastFrameNumArg is None: |
| 309 lastFrameNum = maxint | 309 lastFrameNum = maxint |
| 310 else: | 310 else: |
| 311 lastFrameNum = lastFrameNumArg | 311 lastFrameNum = lastFrameNumArg |
| 312 nZerosFilename = int(ceil(log10(lastFrameNum))) | 312 nZerosFilename = int(ceil(log10(lastFrameNum))) |
| 362 key = cv2.waitKey() | 362 key = cv2.waitKey() |
| 363 if saveAllImages or saveKey(key): | 363 if saveAllImages or saveKey(key): |
| 364 cv2.imwrite('image-{{:0{}}}.png'.format(nZerosFilename).format(frameNum), img) | 364 cv2.imwrite('image-{{:0{}}}.png'.format(nZerosFilename).format(frameNum), img) |
| 365 frameNum += nFramesStep | 365 frameNum += nFramesStep |
| 366 if nFramesStep > 1: | 366 if nFramesStep > 1: |
| 367 capture.set(cv2.CAP_PROP_POS_FRAMES, frameNum) | 367 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, frameNum) |
| 368 cv2.destroyAllWindows() | 368 cv2.destroyAllWindows() |
| 369 else: | 369 else: |
| 370 print('Cannot load file ' + videoFilename) | 370 print('Cannot load file ' + videoFilename) |
| 371 | 371 |
| 372 def computeHomographyFromPDTV(camera): | 372 def computeHomographyFromPDTV(camera): |
| 605 | 605 |
| 606 nImages = len(inputData) | 606 nImages = len(inputData) |
| 607 return array(inputData, dtype = float32), array([classLabel]*nImages) | 607 return array(inputData, dtype = float32), array([classLabel]*nImages) |
| 608 | 608 |
| 609 | 609 |
| 610 ######################### | |
| 611 # running tests | |
| 612 ######################### | |
| 613 | |
| 614 if __name__ == "__main__": | |
| 615 import doctest | |
| 616 import unittest | |
| 617 suite = doctest.DocFileSuite('tests/cvutils.txt') | |
| 618 #suite = doctest.DocTestSuite() | |
| 619 unittest.TextTestRunner().run(suite) | |
| 620 #doctest.testmod() | |
| 621 #doctest.testfile("example.txt") |
