2017-11-06 4 views
-1

Ich versuche Perspektive Transformation Beispiel aus der Dokumentation, aber ich bekomme ein anderes Ergebnis als das Beispiel.OpenCV 3: Was ist das Problem mit der Perspektiventransformation in openCV 3.3.1?

import cv2 
import matplotlib.pyplot as plt 
import numpy as np 
img = cv2.imread('sudoku.png') 
rows,cols,ch = img.shape 
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]]) 
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]]) 
M = cv2.getPerspectiveTransform(pts1,pts2) 
dst = cv2.warpPerspective(img,M,(300,300)) 
plt.subplot(121),plt.imshow(img),plt.title('Input') 
plt.subplot(122),plt.imshow(dst),plt.title('Output') 
plt.show() 

Das Ergebnis nach dem Beispiel wie aussehen sollte (ignorieren Sie die grüne Linien) enter image description here

während das, was ich Aussehen bekam wie

Irgendwelche Ideen, was hier vor sich geht ? Ich bin auf MacOS 10.13, openCV 3.3.1 und mit Python 3.6

+0

Was ist die Größe des Eingangsbildes? Wie hast du die pts1-Punkte ausgewählt? – Miki

+0

Es wurde alles im Dokumentationsbeispiel angegeben. – Coddy

+0

Sie können deutlich sehen, dass das Bild von der x, y-Achse größer ist als das, das Sie mit dem grünen Kreuz zeigen ... Kommen Sie, ein wenig Aufwand ... – Miki

Antwort

1

Sie haben die falschen Coords.

## sudo.png (563, 558, 3) 

## tl->tr->br->bl 
pts1 = np.float32([[76,85],[490,70],[520,520],[35,512]]) 
pts2 = np.float32([[0,0],[300,0],[300,300], [0,300]]) 

enter image description here

+0

Verwenden Sie Matplotlib zum Plotten? Ich bekomme immer noch nicht das Ergebnis. – Coddy

+0

Ich benutze opencv imshow um die Bilder anzuzeigen. – Silencer

+0

die richtige Reihenfolge, die für mich funktionierte, ist tl -> tr -> bl -> br – Coddy