Mercurial Hosting > traffic-intelligence
changeset 416:8fdbc13dad8b
cleaned imagebox code
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 25 Sep 2013 16:13:27 -0400 |
parents | 27f14b99f5a8 |
children | a2ff03a52b73 |
files | python/cvutils.py |
diffstat | 1 files changed, 24 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/python/cvutils.py Wed Sep 25 14:49:30 2013 -0400 +++ b/python/cvutils.py Wed Sep 25 16:13:27 2013 -0400 @@ -173,32 +173,34 @@ print 'Cannot load file ' + videoFilename return None - def imageBox(img, obj, frameNum, homography, width, height, px=.2, py=.2, PixelThreshold=800): + def imageBox(img, obj, frameNum, homography, width, height, px = 0.2, py = 0.2, pixelThreshold = 800): + 'Computes the bounding box of object at frameNum' x = [] y = [] for f in obj.features: if f.existsAtInstant(frameNum): - x.append(f.getPositionAtInstant(frameNum).project(homography).x) - y.append(f.getPositionAtInstant(frameNum).project(homography).y) - Xmin = min(x) - Xmax = max(x) - Ymin = min(y) - Ymax = max(y) - XMm = px * (Xmax - Xmin) - YMm = py * (Ymax - Ymin) - a = max(Ymax - Ymin + (2 * YMm), Xmax - (Xmin + 2 * XMm)) - Y_Crop_min = int(max(0, .5 * (Ymin + Ymax - a))) - Y_Crop_Max = int(min(height - 1, .5 * (Ymin + Ymax + a))) - X_Crop_min = int(max(0, .5 * (Xmin + Xmax - a))) - X_Crop_Max = int(min(width - 1, .5 * (Xmin + Xmax + a))) - if Y_Crop_Max != Y_Crop_min and X_Crop_Max != X_Crop_min and (Y_Crop_Max - Y_Crop_min) * (X_Crop_Max - X_Crop_min) > PixelThreshold: - img_crop = img[Y_Crop_min : Y_Crop_Max, X_Crop_min : X_Crop_Max] + projectedPosition = f.getPositionAtInstant(frameNum).project(homography) + x.append(projectedPosition.x) + y.append(projectedPosition.y) + xmin = min(x) + xmax = max(x) + ymin = min(y) + ymax = max(y) + xMm = px * (xmax - xmin) + yMm = py * (ymax - ymin) + a = max(ymax - ymin + (2 * yMm), xmax - (xmin + 2 * xMm)) + yCropMin = int(max(0, .5 * (ymin + ymax - a))) + yCropMax = int(min(height - 1, .5 * (ymin + ymax + a))) + xCropMin = int(max(0, .5 * (xmin + xmax - a))) + xCropMax = int(min(width - 1, .5 * (xmin + xmax + a))) + if yCropMax != yCropMin and xCropMax != xCropMin and (yCropMax - yCropMin) * (xCropMax - xCropMin) > pixelThreshold: + imgcrop = img[yCropMin : yCropMax, xCropMin : xCropMax] else: - img_crop = [] - return img_crop, Y_Crop_min, Y_Crop_Max, X_Crop_min, X_Crop_Max + imgcrop = [] + return imgcrop, yCropMin, yCropMax, xCropMin, xCropMax - def displayTrajectories(videoFilename, objects, boundingBoxes, homography = None, firstFrameNum = 0, lastFrameNumArg = None, printFrames = True, rescale = 1.): + def displayTrajectories(videoFilename, objects, boundingBoxes = {}, homography = None, firstFrameNum = 0, lastFrameNumArg = None, printFrames = True, rescale = 1.): '''Displays the objects overlaid frame by frame over the video ''' from moving import userTypeNames @@ -231,13 +233,13 @@ if frameNum in boundingBoxes.keys(): for rect in boundingBoxes[frameNum]: cv2.rectangle(img, rect[0].asint().astuple(), rect[1].asint().astuple(), cvRed) + elif obj.features != None: + imgcrop, yCropMin, yCropMax, xCropMin, xCropMax = imageBox(img, obj, frameNum, homography, width, height) + cv2.rectangle(img, (xCropMin, yCropMin), (xCropMax, yCropMax), cvBlue, 1) objDescription = '{} '.format(obj.num) if userTypeNames[obj.userType] != 'unknown': objDescription += userTypeNames[obj.userType][0].upper() cv2.putText(img, objDescription, obj.projectedPositions[frameNum-obj.getFirstInstant()].asint().astuple(), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) - if obj.features != None: - img_crop, Y_Crop_min, Y_Crop_Max, X_Crop_min, X_Crop_Max = imageBox(img, obj, frameNum, homography, width, height) - cv2.rectangle(img, (X_Crop_min, Y_Crop_min), (X_Crop_Max, Y_Crop_Max), cvBlue, 1) cvImshow('frame', img, rescale) key = cv2.waitKey() if saveKey(key):