[PYTHON] [Achtung] Beachten Sie beim Erstellen eines Binärbilds (1 Bit / Pixel) das Dateiformat!

Einführung

Hallo! Dieses Mal möchte ich über das Dateiformat beim Erstellen eines Binärbilds sprechen.

Hier wird der Fall des "Konvertierens eines Graustufenbildes (8 Bit / Pixel) in ein Binärbild (1 Bit / Pixel)" als Beispiel erläutert.

Die Erklärung basiert auf der Bildkonvertierung am Beispiel eines Kissens. Diese Geschichte ist jedoch auf das Dateiformat zurückzuführen. Sie sollten sie daher unbedingt kennen, wenn Sie ein Binärbild (1 Bit / Pixel) erstellen. ist.

Wenn Sie das Binärbild hingegen als 0 (schwarz) und 255 (weiß) speichern möchten, beträgt es 8 Bit / Pixel, sodass das hier erläuterte Format nicht Ihren Erwartungen entspricht. (Ändern Sie die Erweiterung in JPEG usw. und speichern Sie.)

In welchem Dateiformat kann ein Binärbild (1 Bit / Pixel) gespeichert werden?

Es ist ein in Schwarzweiß gezeichnetes Binärbild, aber es ist üblich, 1 Pixel (1 Pixel) auf 1 Bit (0: Schwarz, 1: Weiß) zu setzen.

Abhängig vom Dateiformat kann 1 Pixel (1 Pixel) jedoch nicht wie Graustufen in 1 Bit (0: Schwarz, 1: Weiß) und möglicherweise in 8 Bit (0: Schwarz, 255: Weiß) gespeichert werden. Machen. (JPEG ist anwendbar.)

Wenn Sie 1 Pixel als 1 Bit speichern möchten (0: Schwarz, 1: Weiß), müssen Sie daher ein kompatibles Dateiformat auswählen. Das Folgende sind typische Beispiele. png pbm bmp etc

In diesem Beispiel wird Kissen verwendet. Überprüfen Sie daher, ob das Dateiformat von Kissen unterstützt wird. https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html

Sie können sehen, dass PNG und BMP mit Kissen kompatibel sind.

Ich werde es dieses Mal nicht verwenden, aber wenn Sie eine andere Bibliothek wie openCV verwenden möchten, überprüfen Sie erneut, ob es sich um ein unterstütztes Dateiformat handelt. http://opencv.jp/opencv-2svn/cpp/highgui_reading_and_writing_images_and_video.html?highlight=write#imwrite

Entwicklungsumgebung

Windows10 python3.7.7 pillow=7.1.2

"Graustufenbild (8 Bit / Pixel) in Binärbild (1 Bit / Pixel) konvertieren"

Lassen Sie uns den Quellcode zeigen. Dieses Mal konvertieren wir von einem Graustufenbild (8 Bit / Pixel) in ein Binärbild (1 Bit / Pixel). Es ist auch möglich, ein Vollfarbbild (8 Bit / Pixel für jedes RGB) in ein Binärbild (1 Bit / Pixel) umzuwandeln. In diesem Fall kommentieren Sie bitte aus, ob inimg.mode == "L" :. (Vergiss das andere nicht)

gray2bin.py


import os
import glob

from PIL import Image

if __name__ == "__main__":
    get_dir = os.walk("./input")

    #Holen Sie sich das aktuelle Verzeichnis
    current_dir = os.getcwd()

    #Eingabeverzeichnis abrufen
    indir = current_dir + "\\input\\"

    #Ausgabeverzeichnis abrufen
    outdir = current_dir + "\\output_bin\\"

    #Erstellen, wenn kein Ausgabeordner vorhanden ist
    if os.path.isdir(outdir) == False:
        os.mkdir(outdir)

    #Wählen Sie ein Bild im Eingabeverzeichnis
    all_images = glob.glob(indir + "\\*")

    #Verarbeitung für jedes Bild
    for img in all_images:

        #Holen Sie sich den Bildnamen des Eingabebildes (mit Erweiterung)
        basename = os.path.basename(img)
        print(basename)

        #Trennen Sie die Erweiterung vom Bildnamen des Eingabebildes
        name, ext = os.path.splitext(basename)

        #Speichern Sie das Ziel des in ein Binärbild konvertierten Bildes
        save_path = outdir + name + "_bin.png " #pbm oder bmp ist in Ordnung
        #save_path = outdir + name + "_bin.bmp"


        if ext != ".bat" and ext != ".txt":
            with Image.open(img) as inimg:

                # print("inimg mode:",inimg.mode) # inimg mode: RGB

                # L(grayscale)Wenn Sie binarisieren möchten, ohne Fragen zu stellen, kommentieren Sie dies aus.
                if inimg.mode == "L":

                    conv_image = inimg.convert("1")
                    #print("inimg.mode:", conv_image.mode)

                    conv_image.save(save_path)

                else:
                    print("inimg mode(not L):", inimg.mode)

Zusammenfassung

Diesmal am Beispiel "Konvertieren eines Graustufenbilds (8 Bit / Pixel) in ein Binärbild (1 Bit / Pixel)" als Beispiel: Erläuterte die Punkte, die beim Speichern eines Binärbilds (1 Bit / Pixel) zu beachten sind.

Die hier beschriebenen Dateiformate (png / bmp usw.) sind nicht typisch, aber nicht alle. Wir hoffen, dass Sie verschiedene andere Dateiformate ausprobieren, um Ihren Anforderungen gerecht zu werden.

Wenn Sie Kommentare haben, lassen Sie es uns bitte wissen. (Ich möchte es ab dem nächsten Mal auf Github veröffentlichen können.)

Recommended Posts

[Achtung] Beachten Sie beim Erstellen eines Binärbilds (1 Bit / Pixel) das Dateiformat!
Seien Sie vorsichtig, wenn Sie die Eigenvektoren einer Matrix unterscheiden
Diff eine Binärdatei (Bilddatei, etc.)
Dinge, die beim Erstellen eines Empfehlungssystems mit Item2Vec zu beachten sind
[Python-Memo] Seien Sie vorsichtig, wenn Sie ein zweidimensionales Array erstellen (Liste der Listen).
Achten Sie beim Erstellen einer Bildmaske mit Numpy auf den Typ
Die Geschichte von Django, wie er eine Bibliothek erstellt, die vielleicht etwas nützlicher ist
Versuchen Sie, die Dateiansicht von TortoiseHg ein wenig zu ändern
Wenn eine Datei im freigegebenen Ordner von Raspberry Pi abgelegt wird, wird der Vorgang ausgeführt.
Geben Sie das Ausgabeergebnis von sklearn.metrics.classification_report als CSV-Datei aus
Erstellen einer Liste, wenn die Nomenklatur für einen bestimmten Zeitraum gültig ist