Mercurial Hosting > traffic-intelligence
view python/cvutils.py @ 72:575340e6fce3
corrected most of the method to load NGSIM data (adapted to the current MovingObject class
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 14 Jan 2011 19:49:20 -0500 |
parents | 40e8e3bb3702 |
children | b85912ab4064 |
line wrap: on
line source
#! /usr/bin/env python '''Image/Video utilities''' import Image, ImageDraw # PIL #import aggdraw # agg on top of PIL (antialiased drawing) from moving import Point #import utils __metaclass__ = type def drawLines(filename, origins, destinations, w = 1, resultFilename='image.png'): '''Draws lines over the image ''' img = Image.open(filename) draw = ImageDraw.Draw(img) #draw = aggdraw.Draw(img) #pen = aggdraw.Pen("red", width) for p1, p2 in zip(origins, destinations): draw.line([p1.x, p1.y, p2.x, p2.y], width = w, fill = (256,0,0)) #draw.line([p1.x, p1.y, p2.x, p2.y], pen) del draw #out = utils.openCheck(resultFilename) img.save(resultFilename) def project(homography, p): '''Returns the coordinates of the projection of the point p through homography''' from numpy.core._dotblas import dot from numpy.core.multiarray import array from numpy.lib.function_base import insert if (homography!=None) and (len(homography)>0): pAugmented = insert(array(p), [2],[1], axis=0) tmp = dot(homography, pAugmented) return [tmp[0]/tmp[2], tmp[1]/tmp[2]] else: return p def projectTrajectory(homography, trajectory): '''Projects a series of points in the format [[x1, x2, ...], [y1, y2, ...]] Warning: not optimized, calls project()''' projected = [[],[]] for x, y in zip(trajectory[0], trajectory[1]): p = [x,y] pp = project(homography, p) projected[0].append(pp[0]) projected[1].append(pp[1]) return projected def invertHomography(homography): 'Returns an inverted homography' from numpy.linalg.linalg import inv invH = inv(homography) invH /= invH[2,2] return invH class FourWayIntersection: '''Simple class for simple intersection outline''' def __init__(self, dimension, coordX, coordY): self.dimension = dimension self.coordX = coordX self.coordY = coordY def plot(self, options = 'k'): from matplotlib.pyplot import plot, axis minX = min(self.dimension[0]) maxX = max(self.dimension[0]) minY = min(self.dimension[1]) maxY = max(self.dimension[1]) plot([minX, self.coordX[0], self.coordX[0]], [self.coordY[0], self.coordY[0], minY],options) plot([self.coordX[1], self.coordX[1], maxX], [minY, self.coordY[0], self.coordY[0]],options) plot([minX, self.coordX[0], self.coordX[0]], [self.coordY[1], self.coordY[1], maxY],options) plot([self.coordX[1], self.coordX[1], maxX], [maxY, self.coordY[1], self.coordY[1]],options) axis('equal')