2012-03-21 10 views
12

Coś wygląda na afoul z "getPerspectiveTransform" w opakowaniu python2 dla opencv. Na początek wymaga dwóch argumentów zamiast trzech oczekiwanych.to getPerspectiveTransform zepsuty w opakowaniu opencv python2?

Więc zamiast pierwszego owinięcia na:

cv.GetPerspectiveTransform(source,destination,3x3mat) 

Teraz:

cv2.getPerspectiveTransform(?,?) 

Jeśli staram się umieścić w dwóch zestawów czterech quad vert współrzędne jako argumentów tak:

cv2.getPerspectiveTransform(first_set_of_corners, second_set_of_corners) 

wypluwa następujący błąd:

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 

Jeśli checkVectors nie ma równego cztery (stąd "quad" w czworokącie), to nie jestem pewien, czego ode mnie chce. Podobnie jak w przypadku wszystkich innych elementów w pakunku python2, ta funkcja jest całkowicie nieudokumentowana, więc nie wiem, czy jest ona zepsuta, czy raczej, że robię to źle. Czy ktoś tutaj zdołał sprawić, żeby działało to poprawnie?

Odpowiedz

20

cv2.getPerspectiveTransform i tak nie jest zepsuty.

Może być, twoje punkty nie mają długości 4 lub nie mogą być liczbami float32.

Spróbuj następujący:

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 

Wynik jest:

[[ 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

Tak. Ten drugi był moim problemem. Dziękuję Ci! – Snesticle

+1

Tak, skończyłem tutaj z innego błędu. Czy byłby jakikolwiek łatwy sposób, aby wiedzieć, że chciał float32? Ani na stronie podręcznika docstring ani na stronie podręcznika OpenCV nie wspomniano, że potrzebuje liczb float32 dla cv2.getPerspectiveTransform. –

+1

@darkgreen - sprawdzenie komunikatu o błędzie dotyczy 'CV_32F'; tajemniczy, ale ma sens, gdy go zobaczysz – sapi

Powiązane problemy