2012-03-21 12 views
12

Algo parece estar en conflicto con "getPerspectiveTransform" en el contenedor python2 para opencv. Para empezar, toma dos argumentos en lugar de los tres esperados.es getPerspectiveTransform roto en contenedor opencv python2?

Así que en lugar de la de la primera envoltura:

cv.GetPerspectiveTransform(source,destination,3x3mat) 

Es ahora:

cv2.getPerspectiveTransform(?,?) 

Si trato de poner en dos grupos de cuatro vert quad coordina como los argumentos de este modo:

cv2.getPerspectiveTransform(first_set_of_corners, second_set_of_corners) 

escupe el siguiente error:

cv2.error: C:\slave\WinInstallerMegaPack\src\opencv\modules\imgproc\src\imgwarp. 
cpp:3194: error: (-215) src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV 
_32F) == 4 

Si los checkVectors no deben ser cuatro (de ahí el "quad" en cuadrilátero) entonces no estoy seguro de lo que quiere de mí. Al igual que con todo lo demás en el contenedor python2, esta función está completamente indocumentada, así que no sé si está rota o, más probablemente, que la estoy haciendo mal. ¿Alguien ha logrado que esto funcione correctamente?

Respuesta

20

cv2.getPerspectiveTransform no está roto de todos modos.

Puede ser, sus puntos no son de longitud 4 o pueden no ser números float32.

seguir los siguientes pasos:

import cv2 
import numpy as np 

img = cv2.imread('1original.jpg',0) 

src = np.array([[50,50],[450,450],[70,420],[420,70]],np.float32) 
dst = np.array([[0,0],[299,299],[0,299],[299,0]],np.float32) 

ret = cv2.getPerspectiveTransform(src,dst) 
print ret 

El resultado es:

[[ 8.36097696e-01 -4.51944700e-02 -3.95451613e+01] 
[ -4.51944700e-02 8.36097696e-01 -3.95451613e+01] 
[ 6.45161290e-05 6.45161290e-05 1.00000000e+00]] 
+0

Sip. Este último fue mi problema. ¡Gracias! – Snesticle

+1

Sí, terminé aquí por un error diferente. ¿Hubiera alguna manera fácil de saber que quería flotar32? Ni la docstring ni la página de manual de OpenCV mencionaron que quería números float32 para cv2.getPerspectiveTransform. –

+1

@darkgreen - la verificación en el mensaje de error es para 'CV_32F'; críptico, pero tiene sentido una vez que lo ves – sapi