Mercurial > hg > nsaunier > traffic-intelligence
comparison python/cvutils.py @ 99:e7dc5a780f09
added conversion functions and homography computation
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Tue, 12 Jul 2011 17:01:59 -0400 |
| parents | b85912ab4064 |
| children | 2a3cafcf5faf |
comparison
equal
deleted
inserted
replaced
| 98:b85912ab4064 | 99:e7dc5a780f09 |
|---|---|
| 1 #! /usr/bin/env python | 1 #! /usr/bin/env python |
| 2 '''Image/Video utilities''' | 2 '''Image/Video utilities''' |
| 3 | 3 |
| 4 import Image, ImageDraw # PIL | 4 import Image, ImageDraw # PIL |
| 5 import cv | |
| 6 from sys import stdout | |
| 7 | |
| 5 #import aggdraw # agg on top of PIL (antialiased drawing) | 8 #import aggdraw # agg on top of PIL (antialiased drawing) |
| 6 from moving import Point | 9 from moving import Point |
| 7 #import utils | 10 #import utils |
| 8 | 11 |
| 9 __metaclass__ = type | 12 __metaclass__ = type |
| 21 #draw.line([p1.x, p1.y, p2.x, p2.y], pen) | 24 #draw.line([p1.x, p1.y, p2.x, p2.y], pen) |
| 22 del draw | 25 del draw |
| 23 | 26 |
| 24 #out = utils.openCheck(resultFilename) | 27 #out = utils.openCheck(resultFilename) |
| 25 img.save(resultFilename) | 28 img.save(resultFilename) |
| 29 | |
| 30 def computeHomography(srcPoints, dstPoints, method=0, ransacReprojThreshold=0.0): | |
| 31 '''Returns the homography matrix mapping from srcPoints to dstPoints (dimension Nx2)''' | |
| 32 cvSrcPoints = arrayToCvMat(srcPoints); | |
| 33 cvDstPoints = arrayToCvMat(dstPoints); | |
| 34 H = cv.CreateMat(3, 3, cv.CV_64FC1) | |
| 35 cv.FindHomography(cvSrcPoints, cvDstPoints, H, method, ransacReprojThreshold) | |
| 36 return H | |
| 37 | |
| 38 def cvMatToArray(cvmat): | |
| 39 '''Converts an OpenCV CvMat to numpy array.''' | |
| 40 from numpy.core.multiarray import zeros | |
| 41 a = zeros((cvmat.rows, cvmat.cols))#array([[0.0]*cvmat.width]*cvmat.height) | |
| 42 for i in xrange(cvmat.rows): | |
| 43 for j in xrange(cvmat.cols): | |
| 44 a[i,j] = cvmat[i,j] | |
| 45 return a | |
| 46 | |
| 47 def arrayToCvMat(a, t = cv.CV_64FC1): | |
| 48 '''Converts a numpy array to an OpenCV CvMat, with default type CV_64FC1.''' | |
| 49 cvmat = cv.CreateMat(a.shape[0], a.shape[1], t) | |
| 50 for i in range(cvmat.rows): | |
| 51 for j in range(cvmat.cols): | |
| 52 cvmat[i,j] = a[i,j] | |
| 53 return cvmat | |
| 54 | |
| 55 def printCvMat(cvmat, out = stdout): | |
| 56 '''Prints the cvmat to out''' | |
| 57 for i in xrange(cvmat.rows): | |
| 58 for j in xrange(cvmat.cols): | |
| 59 out.write('{0} '.format(cvmat[i,j])) | |
| 60 out.write('\n') | |
| 26 | 61 |
| 27 def projectArray(homography, points): | 62 def projectArray(homography, points): |
| 28 '''Returns the coordinates of the projected points (format 2xN points) | 63 '''Returns the coordinates of the projected points (format 2xN points) |
| 29 through homography''' | 64 through homography''' |
| 30 from numpy.core._dotblas import dot | 65 from numpy.core._dotblas import dot |
