[PYTHON] Achten Sie beim Erstellen einer Bildmaske mit Numpy auf den Typ

Was du machen willst

Wenn Sie einen Teil eines Bildes oder Videos in Schwarz ausfüllen und zuschneiden möchten, erstellen Sie eine Maske für das Bild und überlagern Sie es.

Das Originalbild lena.png Maskiertes Bild masked_image.png

Fehler

Verwenden Sie Numpy, um eine Maske zu erstellen, bei der der Bereich, den Sie schwärzen möchten, 0 und der Bereich, den Sie zuschneiden möchten, 1 ist. Als ich dachte, ich könnte durch Multiplizieren jedes Elements der Matrix maskieren, war die Ausgabe anders als erwartet.

h_img, w_img = img.shape[:2]
mask = np.zeros((h_img, w_img, 3))
radius = int(h_img / 2)
center = radius
cv2.circle(mask, (center, center), radius, (1, 1, 1), thickness=-1, shift=0)
masked_img = img * mask

Maske mit Numpy gemacht err_mask.png

Maskiertes Bild (masked_img) err_masked_image.png

Ursache und Lösung

Wenn Sie eine Matrix mit Numpy definieren, wird standardmäßig der Typ float64 verwendet, sofern nicht dtype angegeben ist. Andererseits wird das durch das Lesen von opencv gelesene Bild abhängig von seiner Helligkeit von CV_8U, CV_16F, CV_32F (normalerweise CV_8U) gelesen. Bei CV_8U unterstützt der Datentyp Numpy np.uint8. Mit anderen Worten, im fehlgeschlagenen Beispiel wird das CV_8U-Bild mit einem float64-Typ maskiert.

Geben Sie beim Definieren einer Matrix mit Numpy den Typ np.uint8 an. erledigt.

mask = np.zeros((h_img, w_img, 3), dtype=np.uint8) #Geben Sie den Typ als uint8 an

Maskiertes Bild masked_image.png

Wenn ich versuche, die Maske als Bild anzuzeigen, ist sie pechschwarz. mask.png

Impressionen

Es ist ein rudimentärer Fehler bei der Nichtübereinstimmung von Datentypen, aber es hat eine Weile gedauert, bis ich es bemerkt habe, wahrscheinlich weil ich in letzter Zeit nur Python verwendet habe und weniger Chancen habe, den Typ zu kennen. Anstatt es in np.zeros zu definieren, hätte ich zunächst np.zeros_like verwenden sollen, um die Matrix einschließlich des Bildtyps zu definieren.

Recommended Posts

Achten Sie beim Erstellen einer Bildmaske mit Numpy auf den Typ
Seien Sie vorsichtig, wenn Sie die Eigenvektoren einer Matrix unterscheiden
Lösung, wenn das Bild mit tkinter [python] nicht angezeigt werden kann
Achten Sie beim Drucken von Japanisch mit Python 3 auf LANG für UnicodeEncodeError
Die Geschichte einer unveränderlichen Form
Seien Sie vorsichtig, wenn Sie einem Array ein Array hinzufügen
Seien Sie vorsichtig, wenn Sie CakePHP3 mit PHP7.2 ausführen
Seien Sie vorsichtig, wenn Sie in regelmäßigen Abständen Tweets mit der Twitter-API abrufen
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering
[Python] Bestimmen Sie den Typ der Iris mit SVM
Seien Sie vorsichtig, wenn Sie mit gzip-komprimierten Textdateien arbeiten
[Achtung] Beachten Sie beim Erstellen eines Binärbilds (1 Bit / Pixel) das Dateiformat!
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Seien Sie vorsichtig beim Lesen von Daten mit Pandas (geben Sie dtype an)
Beim Lesen eines Bildes mit SimpleITK tritt ein Problem auf, wenn sich Japanisch im Pfad befindet
Erstellen Sie ein zweidimensionales Array, indem Sie am Ende eines leeren Arrays mit numpy eine Zeile hinzufügen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
NumPy-Nullen können auch bei einer Größe von 0 definiert werden
Den Typ mit Python beherrschen? (Wann ist eine Typprüfung durchzuführen?)
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Was tun, wenn ein Teil des Hintergrundbilds transparent wird, wenn Sie transparente Bilder mit Pillow kombinieren?
Eine Methode zum Konvertieren des Bildstils unter Beibehaltung der Farbe
Verstehen Sie die Funktion der Faltung am Beispiel der Bildverarbeitung
Seien Sie vorsichtig, wenn Sie den Standardargumentwert in der Python 3-Serie angeben
Machen Sie sich mit der Pipeline von spaCy vertraut (wollen Sie es sein)
Berechnen Sie die Ähnlichkeit zwischen Sätzen mit Doc2Vec, einer Weiterentwicklung von Word2Vec
[Statistik] Erfassen Sie das Bild der zentralen Polbegrenzungstheorie mit einem Diagramm
ZipArchive konnte nicht mit dem auf ConoHa gestarteten Laravel-Image verwendet werden.
Berücksichtigen Sie die Verarbeitungsgeschwindigkeit, um den Bildpuffer mit numpy.ndarray zu verschieben
[Pythonista] Die Geschichte einer Aktion zum Kopieren ausgewählten Textes
Lösung, wenn beim Ausblenden des Konsolenbildschirms mit PyInstaller ein Fehler auftritt
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Ein Memo beim Erstellen einer Umgebung, die vorerst mit Lambda @ Edge debuggt werden kann