Mercurial Hosting > traffic-intelligence
comparison python/cvutils.py @ 998:933670761a57
updated code to python 3 (tests pass and scripts run, but non-executed parts of code are probably still not correct)
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Sun, 27 May 2018 23:22:48 -0400 |
parents | e8eabef7857c |
children | 75af46516b2b |
comparison
equal
deleted
inserted
replaced
997:4f3387a242a1 | 998:933670761a57 |
---|---|
55 def saveKey(key): | 55 def saveKey(key): |
56 return chr(key&255) == 's' | 56 return chr(key&255) == 's' |
57 | 57 |
58 def int2FOURCC(x): | 58 def int2FOURCC(x): |
59 fourcc = '' | 59 fourcc = '' |
60 for i in xrange(4): | 60 for i in range(4): |
61 fourcc += unichr((x >> 8*i)&255) | 61 fourcc += chr((x >> 8*i)&255) |
62 return fourcc | 62 return fourcc |
63 | 63 |
64 def rgb2gray(rgb): | 64 def rgb2gray(rgb): |
65 return dot(rgb[...,:3], [0.299, 0.587, 0.144]) | 65 return dot(rgb[...,:3], [0.299, 0.587, 0.144]) |
66 | 66 |
77 | 77 |
78 def cvMatToArray(cvmat): | 78 def cvMatToArray(cvmat): |
79 '''Converts an OpenCV CvMat to numpy array.''' | 79 '''Converts an OpenCV CvMat to numpy array.''' |
80 print('Deprecated, use new interface') | 80 print('Deprecated, use new interface') |
81 a = zeros((cvmat.rows, cvmat.cols))#array([[0.0]*cvmat.width]*cvmat.height) | 81 a = zeros((cvmat.rows, cvmat.cols))#array([[0.0]*cvmat.width]*cvmat.height) |
82 for i in xrange(cvmat.rows): | 82 for i in range(cvmat.rows): |
83 for j in xrange(cvmat.cols): | 83 for j in range(cvmat.cols): |
84 a[i,j] = cvmat[i,j] | 84 a[i,j] = cvmat[i,j] |
85 return a | 85 return a |
86 | 86 |
87 def createWhiteImage(height, width, filename): | 87 def createWhiteImage(height, width, filename): |
88 img = ones((height, width, 3), uint8)*255 | 88 img = ones((height, width, 3), uint8)*255 |
125 colorType = 'default' | 125 colorType = 'default' |
126 if len(filenames) == 0: | 126 if len(filenames) == 0: |
127 print('Empty filename list') | 127 print('Empty filename list') |
128 return | 128 return |
129 if windowNames is None: | 129 if windowNames is None: |
130 windowNames = ['frame{}'.format(i) for i in xrange(len(filenames))] | 130 windowNames = ['frame{}'.format(i) for i in range(len(filenames))] |
131 wait = 5 | 131 wait = 5 |
132 if rescale == 1.: | 132 if rescale == 1.: |
133 for windowName in windowNames: | 133 for windowName in windowNames: |
134 cv2.namedWindow(windowName, cv2.WINDOW_NORMAL) | 134 cv2.namedWindow(windowName, cv2.WINDOW_NORMAL) |
135 if frameRate > 0: | 135 if frameRate > 0: |
140 if array([cap.isOpened() for cap in captures]).all(): | 140 if array([cap.isOpened() for cap in captures]).all(): |
141 key = -1 | 141 key = -1 |
142 ret = True | 142 ret = True |
143 nFramesShown = 0 | 143 nFramesShown = 0 |
144 if firstFrameNums is not None: | 144 if firstFrameNums is not None: |
145 for i in xrange(len(captures)): | 145 for i in range(len(captures)): |
146 captures[i].set(cv2.PROP_POS_FRAMES, firstFrameNums[i]) | 146 captures[i].set(cv2.CAP_PROP_POS_FRAMES, firstFrameNums[i]) |
147 while ret and not quitKey(key): | 147 while ret and not quitKey(key): |
148 rets = [] | 148 rets = [] |
149 images = [] | 149 images = [] |
150 for cap in captures: | 150 for cap in captures: |
151 ret, img = cap.read() | 151 ret, img = cap.read() |
153 images.append(img) | 153 images.append(img) |
154 ret = array(rets).all() | 154 ret = array(rets).all() |
155 if ret: | 155 if ret: |
156 if printFrames: | 156 if printFrames: |
157 print('frame shown {0}'.format(nFramesShown)) | 157 print('frame shown {0}'.format(nFramesShown)) |
158 for i in xrange(len(filenames)): | 158 for i in range(len(filenames)): |
159 if text is not None: | 159 if text is not None: |
160 cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed[colorType]) | 160 cv2.putText(images[i], text, (10,50), cv2.FONT_HERSHEY_PLAIN, 1, cvRed[colorType]) |
161 cvImshow(windowNames[i], images[i], rescale) # cv2.imshow('frame', img) | 161 cvImshow(windowNames[i], images[i], rescale) # cv2.imshow('frame', img) |
162 key = cv2.waitKey(wait) | 162 key = cv2.waitKey(wait) |
163 if saveKey(key): | 163 if saveKey(key): |
164 cv2.imwrite('image-{}.png'.format(frameNum), img) | 164 cv2.imwrite('image-{}.png'.format(frameNum), img) |
165 nFramesShown += step | 165 nFramesShown += step |
166 if step > 1: | 166 if step > 1: |
167 for i in xrange(len(captures)): | 167 for i in range(len(captures)): |
168 captures[i].set(cv2.CAP_PROP_POS_FRAMES, firstFrameNums[i]+nFramesShown) | 168 captures[i].set(cv2.CAP_PROP_POS_FRAMES, firstFrameNums[i]+nFramesShown) |
169 cv2.destroyAllWindows() | 169 cv2.destroyAllWindows() |
170 else: | 170 else: |
171 print('Video captures for {} failed'.format(filenames)) | 171 print('Video captures for {} failed'.format(filenames)) |
172 | 172 |
329 if not hasattr(obj, 'projectedPositions'): | 329 if not hasattr(obj, 'projectedPositions'): |
330 obj.projectedPositions = obj.getPositions().homographyProject(homography) | 330 obj.projectedPositions = obj.getPositions().homographyProject(homography) |
331 if undistort: | 331 if undistort: |
332 obj.projectedPositions = obj.projectedPositions.newCameraProject(newCameraMatrix) | 332 obj.projectedPositions = obj.projectedPositions.newCameraProject(newCameraMatrix) |
333 cvPlot(img, obj.projectedPositions, cvColors[colorType][obj.getNum()], frameNum-obj.getFirstInstant()) | 333 cvPlot(img, obj.projectedPositions, cvColors[colorType][obj.getNum()], frameNum-obj.getFirstInstant()) |
334 if frameNum not in boundingBoxes.keys() and obj.hasFeatures(): | 334 if frameNum not in boundingBoxes and obj.hasFeatures(): |
335 yCropMin, yCropMax, xCropMin, xCropMax = imageBoxSize(obj, frameNum, homography, width, height) | 335 yCropMin, yCropMax, xCropMin, xCropMax = imageBoxSize(obj, frameNum, homography, width, height) |
336 cv2.rectangle(img, (xCropMin, yCropMin), (xCropMax, yCropMax), cvBlue[colorType], 1) | 336 cv2.rectangle(img, (xCropMin, yCropMin), (xCropMax, yCropMax), cvBlue[colorType], 1) |
337 objDescription = '{} '.format(obj.num) | 337 objDescription = '{} '.format(obj.num) |
338 if moving.userTypeNames[obj.userType] != 'unknown': | 338 if moving.userTypeNames[obj.userType] != 'unknown': |
339 objDescription += moving.userTypeNames[obj.userType][0].upper() | 339 objDescription += moving.userTypeNames[obj.userType][0].upper() |
342 objDescription += " FA" | 342 objDescription += " FA" |
343 cv2.putText(img, objDescription, obj.projectedPositions[frameNum-obj.getFirstInstant()].asint().astuple(), cv2.FONT_HERSHEY_PLAIN, 1, cvColors[colorType][obj.getNum()]) | 343 cv2.putText(img, objDescription, obj.projectedPositions[frameNum-obj.getFirstInstant()].asint().astuple(), cv2.FONT_HERSHEY_PLAIN, 1, cvColors[colorType][obj.getNum()]) |
344 if obj.getLastInstant() == frameNum: | 344 if obj.getLastInstant() == frameNum: |
345 objects.remove(obj) | 345 objects.remove(obj) |
346 # plot object bounding boxes | 346 # plot object bounding boxes |
347 if frameNum in boundingBoxes.keys(): | 347 if frameNum in boundingBoxes: |
348 for rect in boundingBoxes[frameNum]: | 348 for rect in boundingBoxes[frameNum]: |
349 cv2.rectangle(img, rect[0].asint().astuple(), rect[1].asint().astuple(), cvColors[colorType][obj.getNum()]) | 349 cv2.rectangle(img, rect[0].asint().astuple(), rect[1].asint().astuple(), cvColors[colorType][obj.getNum()]) |
350 # plot ground truth | 350 # plot ground truth |
351 if len(annotations) > 0: | 351 if len(annotations) > 0: |
352 for gt in annotations: | 352 for gt in annotations: |
504 width = img.shape[1] | 504 width = img.shape[1] |
505 height = img.shape[0] | 505 height = img.shape[0] |
506 [map1, map2] = computeUndistortMaps(width, height, undistortedImageMultiplication, intrinsicCameraMatrix, distortionCoefficients) | 506 [map1, map2] = computeUndistortMaps(width, height, undistortedImageMultiplication, intrinsicCameraMatrix, distortionCoefficients) |
507 return cv2.remap(img, map1, map2, interpolation=interpolation) | 507 return cv2.remap(img, map1, map2, interpolation=interpolation) |
508 | 508 |
509 | |
510 def printCvMat(cvmat, out = stdout): | |
511 '''Prints the cvmat to out''' | |
512 print('Deprecated, use new interface') | |
513 for i in xrange(cvmat.rows): | |
514 for j in xrange(cvmat.cols): | |
515 out.write('{0} '.format(cvmat[i,j])) | |
516 out.write('\n') | |
517 | |
518 def homographyProject(points, homography, output3D = False): | 509 def homographyProject(points, homography, output3D = False): |
519 '''Returns the coordinates of the points (2xN array) projected through homography''' | 510 '''Returns the coordinates of the points (2xN array) projected through homography''' |
520 if points.shape[0] != 2: | 511 if points.shape[0] != 2: |
521 raise Exception('points of dimension {}'.format(points.shape)) | 512 raise Exception('points of dimension {}'.format(points.shape)) |
522 | 513 |