Plus tôt, j'ai écrit un article Bases du traitement d'image binarisé par Python. C'est le développement de cet article.
Cette fois, comme le nom de l'article l'indique, __ · Suppression du bruit __ __ ・ Transparence du fond __ en plus, __ ・ Traitement d'image inversé __ Exécutez également
import cv2
import numpy as np
#Chargement des images
img = cv2.imread('sample2-1.png')
#Conversion de l'échelle de gris
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#Définition du seuil
threshold_value = 110
#Créer un tableau (pour la sortie)
threshold_img = gray.copy()
#la mise en oeuvre(numpy)
threshold_img[gray < threshold_value] = 0
threshold_img[gray >= threshold_value] = 255
#Output:sample2-2
cv2.imwrite(f'C:\\Users\\[username]\\python\\project1\\sample2-2.png',threshold_img)
#Importation d'images converties en niveaux de gris
img = cv2.imread("sample2-2.png ")
#Traitement d'élimination du bruit
ksize=3
#Filtre médian
img_mask = cv2.medianBlur(img,ksize)
#Image inversée en noir et blanc
img2 = cv2.bitwise_not(img_mask)
#output:sample2-3,2-4
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-3.png ",img_mask)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-4.png ",img2)
#Transparence d'arrière-plan
from PIL import Image
#Chargement des images
org = Image.open( 'sample2-3.png' )
#Créez des images de même taille
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))
#Taille verticale et horizontale
width = org.size[0]
height = org.size[1]
#Traiter avec pour déclaration
for x in range(width):
for y in range(height):
pixel = org.getpixel( (x, y) )
#Pas de traitement blanc
if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
continue
#Écriture autre que blanche
trans.putpixel( (x, y), pixel )
# output:sample2-5
trans.save('sample2-5.png')
C'est presque le même que le code de Bases du traitement d'images binarisées par Python décrit ci-dessus. Seul le seuil est modifié sur l'image.
#Suppression du bruit
ksize=3
#Filtre médian
img_mask = cv2.medianBlur(img,ksize)
Cette partie est un endroit pour définir la taille du voisinage où le traitement d'image est effectué.
#Image inversée en noir et blanc
img2 = cv2.bitwise_not(img_mask)
Le traitement d'inversion est intégré à opencv, et le traitement d'inversion n'est possible qu'avec cette instruction. Au fait, cette fois. Bien qu'il soit en noir et blanc, il peut également être exécuté avec une image couleur.
#Chargement des images
org = Image.open( 'sample2-3.png' )
#Créez des images de même taille
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))
#Taille verticale et horizontale
width = org.size[0]
height = org.size[1]
#Traiter avec pour déclaration
for x in range(width):
for y in range(height):
pixel = org.getpixel( (x, y) )
#Pas de traitement blanc
if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
continue
#Écriture autre que blanche
trans.putpixel( (x, y), pixel )
Puisque le processus est tel que décrit dans # ci-dessus, la description est omise.
Mettez ces résultats sample2-1 ~ 2-5.
Cette image est souvent utilisée dans le traitement d'image, donc je pense que beaucoup de gens la connaissent. Cela fait partie d'une image nue d'une femme appelée Lena. [Explication sur Lena de Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%8A_(%E7%94%BB%E5%83%8F%E3%83] % 87% E3% 83% BC% E3% 82% BF)
C'est difficile à comprendre dans cet article, vous pouvez donc l'essayer vous-même en copiant le code.
Le code précédent rendait chaque processus plus facile à voir. Cependant, en modifiant l'ordre, le nombre d'étapes peut être réduit.
import cv2
import numpy as np
from PIL import Image
#Chargement des images
img = cv2.imread('sample2-1.png')
#Conversion de l'échelle de gris
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#Définition du seuil
threshold_value = 110
#Créer un tableau (pour la sortie)
threshold_img = gray.copy()
#la mise en oeuvre(numpy)
threshold_img[gray < threshold_value] = 0
threshold_img[gray >= threshold_value] = 255
#Traitement d'élimination du bruit
ksize=3
#Filtre médian
img_mask = cv2.medianBlur(img,ksize)
#Image inversée en noir et blanc
img2 = cv2.bitwise_not(img_mask)
#Transparence d'arrière-plan
#Chargement des images
org = Image.open('sample2-3.png')
#Créez des images de même taille
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))
#Taille verticale et horizontale
width = org.size[0]
height = org.size[1]
#Traiter avec pour déclaration
for x in range(width):
for y in range(height):
pixel = org.getpixel( (x, y) )
#Pas de traitement blanc
if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
continue
#Écriture autre que blanche
trans.putpixel( (x, y), pixel )
#Output:sample2-2~2-5
cv2.imwrite(f'C:\\Users\\[username]\\python\\project1\\sample2-2.png',threshold_img)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-3.png ",img_mask)
cv2.imwrite("C:\\Users\\[username]\\python\\project1\\sample2-4.png ",img2)
trans.save('sample2-5.png')
Lorsqu'il s'agit d'un traitement par lots, une erreur peut survenir, mais c'était possible avec jupyter notebook. Étant donné que l'image dans le processus peut être lue directement sans lecture, elle sera proche de l'erreur mais plus rapide.
Recommended Posts