From 7a14a2996b5a1509d2650eaebd04f404ea03b25f Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Wed, 27 Aug 2014 02:01:48 +0200 Subject: planares warping fuer stabilisierung. sieht doof aus --- warp.py | 75 +++++++++++++++++++++++++++++++---------------------------------- 1 file changed, 36 insertions(+), 39 deletions(-) (limited to 'warp.py') diff --git a/warp.py b/warp.py index 7cda232..746b665 100644 --- a/warp.py +++ b/warp.py @@ -2,48 +2,45 @@ import math import cv2 import numpy -xlist=[] -ylist=[] - -xres=1600/2 -yres=900/2 - -#constant = 1./math.sqrt((xres/2)**2 + (yres/2)**2) -constant = 30./41.5*3 -# found out experimentally -constant2= 1./(1280/2.)*math.atan(30./40) -print constant2 - -# calculated from official spec: maximum angle (i.e., over the diagonals) -# is 92 deg. -> angle over half a diagonal's length is 92/2 deg -constant2= 1./(math.sqrt((1280/2)**2+(720/2)**2))*(92/2)/180*math.pi -print constant2 +def get_maps(xres,yres): + xlist=[] + ylist=[] + + constant = 30./41.5*3 + + # calculated from official spec: maximum angle (i.e., over the diagonals) + # is 92 deg. -> angle over half a diagonal's length is 92/2 deg + constant2= 1./(math.sqrt((1280/2)**2+(720/2)**2))*(92/2)/180*math.pi + + for y in xrange(0,yres): + xtmp=[] + ytmp=[] + + yy=(y-yres/2.)/xres # yes, xres. + for x in xrange(0,xres): + xx=(x-xres/2.)/xres + + dist = math.sqrt(xx**2 + yy**2) + + if (dist != 0): + xtmp=xtmp+[ 1280/2+ xx/dist/constant2*math.atan(constant*dist) ] + ytmp=ytmp+[ 720/2 + yy/dist/constant2*math.atan(constant*dist) ] + else: + xtmp=xtmp+[0+1280/2] + ytmp=ytmp+[0+720/2] + + xlist=xlist+[xtmp] + ylist=ylist+[ytmp] + + if y % 10 == 0: + print y -for y in xrange(0,yres): - xtmp=[] - ytmp=[] + xmap=numpy.array(xlist).astype('float32') + ymap=numpy.array(ylist).astype('float32') - yy=(y-yres/2.)/xres # yes, xres. - for x in xrange(0,xres): - xx=(x-xres/2.)/xres + return xmap,ymap - dist = math.sqrt(xx**2 + yy**2) - - if (dist != 0): - xtmp=xtmp+[ 1280/2+ xx/dist/constant2*math.atan(constant*dist) ] - ytmp=ytmp+[ 720/2 + yy/dist/constant2*math.atan(constant*dist) ] - else: - xtmp=xtmp+[0+1280/2] - ytmp=ytmp+[0+720/2] - - xlist=xlist+[xtmp] - ylist=ylist+[ytmp] - - if y % 10 == 0: - print y - -xmap=numpy.array(xlist).astype('float32') -ymap=numpy.array(ylist).astype('float32') +xmap,ymap = get_maps(1600/2,900/2) img=cv2.imread("cam42.png") img2=cv2.remap(img, xmap, ymap, cv2.INTER_CUBIC) -- cgit v1.2.3