Zuvor schrieb ich einen Artikel Grundlagen der binärisierten Bildverarbeitung durch Python. Dies ist die Entwicklung dieses Artikels.
Diesmal, wie der Name des Artikels sagt, __ · Geräuschreduzierung __ __ ・ Hintergrundtransparenz __ und dazu, __ ・ Invertierte Bildverarbeitung __ Auch laufen
import cv2
import numpy as np
#Bilder laden
img = cv2.imread('sample2-1.png')
#Graustufenumwandlung
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#Schwellenwert einstellen
threshold_value = 110
#Array erstellen (für Ausgabe)
threshold_img = gray.copy()
#Implementierung(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)
#Importieren von in Graustufen konvertierten Bildern
img = cv2.imread("sample2-2.png ")
#Rauschunterdrückungsverarbeitung
ksize=3
#Medianfilter
img_mask = cv2.medianBlur(img,ksize)
#Invertiertes Schwarzweißbild
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)
#Hintergrundtransparenz
from PIL import Image
#Bilder laden
org = Image.open( 'sample2-3.png' )
#Erstellen Sie Bilder derselben Größe
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))
#Vertikale und horizontale Größe
width = org.size[0]
height = org.size[1]
#Mit for-Anweisung verarbeiten
for x in range(width):
for y in range(height):
pixel = org.getpixel( (x, y) )
#Keine weiße Behandlung
if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
continue
#Schreiben anders als weiß
trans.putpixel( (x, y), pixel )
# output:sample2-5
trans.save('sample2-5.png')
Dies entspricht fast dem oben beschriebenen Code von Grundlagen der binärisierten Bildverarbeitung durch Python. Auf dem Bild wird nur der Schwellenwert geändert.
#Geräuschreduzierung
ksize=3
#Medianfilter
img_mask = cv2.medianBlur(img,ksize)
In diesem Teil können Sie die Größe der Umgebung festlegen, in der die Bildverarbeitung ausgeführt wird.
#Invertiertes Schwarzweißbild
img2 = cv2.bitwise_not(img_mask)
Die Inversionsverarbeitung ist in opencv integriert, und die Inversionsverarbeitung ist nur mit dieser Anweisung möglich. Übrigens diesmal. Obwohl es schwarzweiß ist, kann es auch mit einem Farbbild ausgeführt werden.
#Bilder laden
org = Image.open( 'sample2-3.png' )
#Erstellen Sie Bilder derselben Größe
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))
#Vertikale und horizontale Größe
width = org.size[0]
height = org.size[1]
#Mit for-Anweisung verarbeiten
for x in range(width):
for y in range(height):
pixel = org.getpixel( (x, y) )
#Keine weiße Behandlung
if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
continue
#Schreiben anders als weiß
trans.putpixel( (x, y), pixel )
Da der Prozess wie oben in # beschrieben ist, wird die Beschreibung weggelassen.
Setzen Sie diese Ergebnisse sample2-1 ~ 2-5.
Dieses Bild wird oft in der Bildverarbeitung verwendet, daher denke ich, dass viele Leute damit vertraut sind. Es ist Teil eines Aktbildes einer Frau namens Lena. [Erklärung zu Lena aus 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)
In diesem Artikel ist es schwer zu verstehen, daher können Sie es selbst versuchen, indem Sie den Code kopieren.
Der vorherige Code machte es einfacher, jeden Prozess zu sehen. Durch Ändern der Reihenfolge kann jedoch die Anzahl der Schritte verringert werden.
import cv2
import numpy as np
from PIL import Image
#Bilder laden
img = cv2.imread('sample2-1.png')
#Graustufenumwandlung
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#Schwellenwert einstellen
threshold_value = 110
#Array erstellen (für Ausgabe)
threshold_img = gray.copy()
#Implementierung(numpy)
threshold_img[gray < threshold_value] = 0
threshold_img[gray >= threshold_value] = 255
#Rauschunterdrückungsverarbeitung
ksize=3
#Medianfilter
img_mask = cv2.medianBlur(img,ksize)
#Invertiertes Schwarzweißbild
img2 = cv2.bitwise_not(img_mask)
#Hintergrundtransparenz
#Bilder laden
org = Image.open('sample2-3.png')
#Erstellen Sie Bilder derselben Größe
trans = Image.new('RGBA', org.size, (0, 0, 0, 0))
#Vertikale und horizontale Größe
width = org.size[0]
height = org.size[1]
#Mit for-Anweisung verarbeiten
for x in range(width):
for y in range(height):
pixel = org.getpixel( (x, y) )
#Keine weiße Behandlung
if pixel[0] == 255 and pixel[1] == 255 and pixel[2] == 255:
continue
#Schreiben anders als weiß
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')
Wenn es sich um einen Stapelprozess handelt, kann ein Fehler auftreten, der jedoch mit einem Jupyter-Notebook möglich war. Da das Bild im Prozess direkt ohne Lesen gelesen werden kann, ist es nahe am Fehler, aber schneller.
Recommended Posts