salut! Cette fois, je voudrais parler du format de fichier lors de la création d'une image binaire.
Ici, le cas de la "conversion d'une image en échelle de gris (8 bits / pixel) en une image binaire (1 bit / pixel)" sera expliqué à titre d'exemple.
L'explication est basée sur la conversion d'image en utilisant un oreiller comme exemple, mais cette histoire est due au format de fichier, c'est donc une histoire que vous devez connaître lors de la création d'une image binaire (1 bit / pixel). est.
En revanche, si vous souhaitez enregistrer l'image binaire en 0 (noir) et 255 (blanc), ce sera 8 bits / pixel, donc le format expliqué ici ne répond pas à vos attentes. (Changez l'extension en JPEG etc. et enregistrez.)
Il s'agit d'une image binaire dessinée en noir et blanc, mais il est courant de définir 1 pixel (1 pixel) sur 1 bit (0: noir, 1: blanc).
Cependant, selon le format de fichier, 1 pixel (1 pixel) ne peut pas être enregistré en 1 bit (0: noir, 1: blanc) comme l'échelle de gris, et il peut être enregistré en 8 bits (0: noir, 255: blanc). Faire. (JPEG est applicable.)
Par conséquent, si vous souhaitez enregistrer 1 pixel sur 1 bit (0: noir, 1: blanc), vous devez sélectionner un format de fichier compatible. Voici des exemples typiques. png pbm bmp etc
Dans cet exemple, l'oreiller est utilisé, vérifiez donc si le format de fichier est pris en charge par l'oreiller. https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
Vous pouvez voir que png et bmp sont compatibles avec l'oreiller.
Je ne vais pas l'utiliser cette fois, mais si vous souhaitez utiliser une autre bibliothèque telle qu'openCV, veuillez vérifier à nouveau s'il s'agit d'un format de fichier pris en charge. 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
Montrons en fait le code source. Cette fois, nous convertissons une image en échelle de gris (8 bits / pixel) en une image binaire (1 bit / pixel). Il est également possible de convertir une image en couleur (8 bits / pixel pour chaque RVB) en une image binaire (1 bit / pixel). Dans ce cas, veuillez commenter si inimg.mode == "L":. (N'oublie pas l'autre)
gray2bin.py
import os
import glob
from PIL import Image
if __name__ == "__main__":
get_dir = os.walk("./input")
#Obtenez le répertoire actuel
current_dir = os.getcwd()
#Obtenir le répertoire d'entrée
indir = current_dir + "\\input\\"
#Obtenir le répertoire de sortie
outdir = current_dir + "\\output_bin\\"
#Créer s'il n'y a pas de dossier de sortie
if os.path.isdir(outdir) == False:
os.mkdir(outdir)
#Sélectionnez une image dans le répertoire d'entrée
all_images = glob.glob(indir + "\\*")
#Traitement pour chaque image
for img in all_images:
#Obtenez le nom de l'image de l'image d'entrée (avec l'extension)
basename = os.path.basename(img)
print(basename)
#Séparez l'extension du nom d'image de l'image d'entrée
name, ext = os.path.splitext(basename)
#Enregistrer la destination de l'image convertie en image binaire
save_path = outdir + name + "_bin.png " #pbm ou bmp c'est bien
#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)Si vous voulez binariser sans poser de questions, commentez.
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)
Cette fois, en utilisant comme exemple "Conversion d'une image en niveaux de gris (8 bits / pixel) en image binaire (1 bit / pixel)", Expliqué les points à noter lors de l'enregistrement d'une image binaire (1 bit / pixel).
Les formats de fichiers décrits ici (png / bmp, etc.) ne sont pas typiques, mais pas tous. Nous espérons que vous essaierez divers autres formats de fichiers en fonction de vos besoins.
Si vous avez des commentaires, veuillez nous le faire savoir. (Je veux pouvoir le publier sur github la prochaine fois.)
Recommended Posts