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.)
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
Windows10 python3.7.7 pillow=7.1.2
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)
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.)