2016-09-16 5 views
2

Ich habe ein Bild F der Größe 1044 * 1408, es hat nur 3 ganze Zahl 0-Werte, 2 und 3.verkleinern/die Größe eines Bildes ohne Interpolation

ich es auf 360 * 480 verkleinern möchten. Jetzt verwende ich Z= cv2.resize(F,(480,380)). Aber Z interpoliert, hat es viele eindeutige Werte, mehr als nur 0, 2 und 3. Ich kann nicht nur die Interpolationswerte aufrunden auf die nächste ganze Zahl, weil ich einige 1s bekommen.

F aus einer tif-Datei gelesen und manipuliert wird, ist es ein ndarray jetzt. So kann ich nicht PIL verwenden: F = F.resize((new_width, new_height)) als F nicht aus F = Image.open(*) ist.

+1

Was Sie wollen, um das Bild wahrscheinlich Resampling statt es zu Ändern der Größe. Da Sie "ndarray" erwähnen, nehme ich an, dass Sie 'numpy' verwenden. Schauen Sie sich die Lösung ("numpy Slicing") in http://stackoverflow.com/questions/25876640/subsampling-every-nth-entry-in-a-numpy-array Es wird Resampling (Subsampling) ohne Interpolation ermöglichen. –

+0

sollte nicht CV_INTER_NN "Interpolation" -Methode wählen Sie einen der ursprünglichen Pixelwerte (der mit dem kleinsten Abstand zu der Größe Pixelgröße)? – Micka

+0

Mit 'interpolation = cv2.INTER_NEAREST' können Sie den nächsten Pixelwert verwenden. Ich kann 'verwenden Z = cv2.resize (F, (480380), Interpolation = cv2.INTER_NEAREST)', zu erhalten nur 0,2 und 3. Ich frage mich, ist es eine Methode, die nicht Interpolation nicht bei allen Produkten – Echo

Antwort

2

Sie können INTER_NEAREST verwenden:

Z= cv2.resize(F,(480,380),fx=0, fy=0, interpolation = cv2.INTER_NEAREST) 
Verwandte Themen