[PYTHON] Datenbereinigung 3 Verwendung von OpenCV und Vorverarbeitung von Bilddaten

Aidemy 2020/9/23

Einführung

Hallo, es ist ja! Ich bin ein Student, aber ich interessiere mich für das AI-Feld, also studiere ich an der AI-spezialisierten Schule "Aidemy". Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank! Dies ist der dritte Beitrag zur Datenbereinigung. Freut mich, dich kennenzulernen.

Was diesmal zu lernen ・ Informationen zu Bilddaten ・ Was Sie mit OpenCV tun können (Bibliothek, die Bilder verarbeitet)

1 Informationen zu Bilddaten

"Farbe" auf dem Computer

-In den Daten wird die Farbe als RGB-Daten in Rot, Grün und Blau (255,0,255 usw.) ausgedrückt. -Das Bild besteht aus einer Sammlung von Punkten __ (Pixel) __. -Die Anzahl der Farbelemente, die ein Pixel darstellen sollen, wird als Kanalnummer bezeichnet („3“, da RGB drei Farben enthält).

Art der Bilddaten

・ BMP kann nicht komprimiert werden und ist groß ・ JPG Hochkomprimierbar, aber nicht dekomprimierbar ・ PNG-Komprimierung und -Dekomprimierung möglich, transparente Verarbeitung möglich ・ Unterstützt GIF-Animation, transparente Verarbeitung möglich

2 OpenCV

Laden und Anzeigen von Bildern mit OpenCV

-OpenCV ist eine Bibliothek, die beim Umgang mit Bildern verwendet wird. Importieren und verwenden Sie cv2. -Lesen Sie mit __cv2.imread ("Dateiname") __ Anzeige mit __cv2.imshow ("Fenstername", Bilddaten lesen) __ (Fenstername kann frei vergeben werden)

import cv2
#sample.Laden Sie ein Bild mit dem Dateinamen jpg
img = cv2.imread("./4050_data_cleansing_data/sample.jpg ")
#Ausgabe img mit Fensternamen als Fenster
cv2.imshow("window",img)

Bilder erstellen und speichern (einfarbig)

#(512*512)Eine Seite grün(0,255,0)Erstellen Sie ein Bild von
img = np.array([[[0,255,0]for _ in range(512)]for _ in range(512)],dtype="uint8")
#Speichern Sie img(Der Dateiname ist "grün".img」)
cv2.imwrite("green.img",img)

Zuschneiden (Schneiden), Größenänderung (Vergrößern / Verkleinern)

-Trimmen ist __ Bilddaten [Startpunkt der y-Achse: Endpunkt der y-Achse, Startpunkt der x-Achse: Endpunkt der x-Achse] __ 0 ist oben links -Resize wird mit __cv2.resize (Bilddaten, (Breite, Höhe)) __ geändert.

#Holen Sie sich die Bildgröße zum Zuschneiden(Höhe,Breite,Anzahl der Farben)
size = img.shape #(1000,667,3)
#Höhe ist 1/2, Breite 1/Auf 3 trimmen (Startpunkt nicht angeben, teilen, damit kein Rest entsteht)
new_img=img[:size[0]//2,:size[1]//3]
#Größe auf doppelte Höhe und dreifache Breite angepasst
new_img=cv2.resize(new_img,(new_img.shape[0]*2,new_img.shape[1]*3))

Drehung / Umkehrung

-Die Drehung des Bildes erfordert eine Transformation, die als affine Transformation bezeichnet wird, und die Transformationsmatrix muss erhalten werden.

-Invertieren erfolgt mit __cv2.flip (image, flipCode) __. Wenn für das zweite Argument "0" angegeben wird, wird es vertikal gespiegelt, wenn eine positive Zahl angegeben wird, wird es horizontal gespiegelt, und wenn eine negative Zahl angegeben wird, wird es vertikal und horizontal gespiegelt.

#Holen Sie sich die Transformationsmatrix(Bei 2-facher Vergrößerung um 90 Grad drehen)
mat=cv2.getRotationMatrix(tuple(np.array([img.shape[1],img.shape[0]])/2),90,2.0)
#Eigentlich drehen
cv2.warpAffine(img,mat,img.shape[::-1][1:3])

Farbkonvertierung / Farbinversion

-Farbeninversion kann auch durchgeführt werden, indem jedes Pixel nacheinander herausgenommen und der Wert x auf "255-x" gesetzt wird. Sie können es einfach mit __cv2.bitwise_not (Bild) __ umdrehen.

#Img Farbraum in Lab geändert
c_img=cv2.cvtColor(img,cv2.COLOR_BGR2LAB)
#Img Farbe umkehren
r_img=cv2.bitwise_not(img)

Anwendung von OpenCV

Schwellenwertverarbeitung

#Schwellenwert 127, Maximalwert 255, Typ ist cv2.THRESH_TOZERO(0 unter dem Schwellenwert, keine Änderung über dem Schwellenwert)
new_img=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)

Maskierung

-Wenn ein Schwarzweißmaskenbild separat erstellt und mit der Funktion cv2.bitwise_and () mit dem Originalbild kombiniert wird, wird nur der weiße Teil des Maskenbilds vom Originalbild ausgegeben. Dies wird als "Maskierung" bezeichnet. -__ Cv2.bitwise_and (Originalbild 1, Originalbild 2 (beim Maskieren verwendet), Maske = Schwarzweißbild für Maske) __

#Lesen Sie das Maskenbild (Schwarzweißbild mit 1 Kanal) und ändern Sie die Größe, um die gleiche Größe zu erzielen.
mask=cv2.imread("./4050_cleansing_data/mask.png ", 0)
mask=cv2.resize(mask,(img.shape[1],img.shape[0]))
#Maske
cv2.bitwise_and(img,img,mask=mask)

Verwischen Sie das Bild

#(51*51)Verwischen
new_img=cv2.GaussianBlur(img,(51,51),0)

Entfernung von Lärm (rau)

・ Verwenden Sie __cv2.fastNlMeansDenoisingColored (Bild) __. Wenn es sich nicht um ein Farbbild handelt, kann der Funktionsname "Farbig" weggelassen werden. (Nl Means bezieht sich auf einen Rauschentfernungsfilter namens Non-Local Means Filter. Entrauschen bedeutet Rauschentfernung.)

new_img=cv2.fastNlMeansDenoisingColored(img)

Schrumpfen / Ausdehnen

-Eine andere Methode der Rauschverarbeitung besteht darin, das Bild einmal zu verkleinern und dann wieder zu erweitern. Diese Methode wird häufig zur Rauschentfernung "Schwellenwertverarbeitung" verwendet. -Erweiterung mit __cv2.dilate (Bild, Filter) __, Vertrag mit __cv2.erode (Bild, Filter) __.

#Schwellenwertverarbeitung von img
new_img=cv2.threshold(img,127,255,cv2.THRESH_BYNARY)
#Filterdefinition
filter=np.array([[0,1,0],[1,0,1],[0,1,0]],np.uint8)
#Schrumpfen und erweitern
new_img=cv2.erode(new_img,filter)
new_img=cv2.dilate(new_img,filter)

Zusammenfassung

-Bilddaten werden von OpenCV verarbeitet. -In OpenCV können Sie Bilder mit __imread () __ lesen, Bilder mit __imshow () __ ausgeben, die Größe mit __resize () __ ändern, mit __flip () __ invertieren und Farben mit ** bitwise_not ** invertieren. Darüber hinaus können Sie Bilder erstellen, zuschneiden und drehen.

Recommended Posts

Datenbereinigung 3 Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Anwendung von Python: Datenbereinigung Teil 3: Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Vorverarbeitung von Präfekturdaten
Informationen zur Datenvorverarbeitung von Systemen, die maschinelles Lernen verwenden
Geschichte der Bildanalyse von PDF-Dateien und Datenextraktion
Überblick über die Verarbeitung natürlicher Sprache und ihre Datenvorverarbeitung
Verwendung und Integration von "Shodan"
Umgebungskonstruktion von Python und OpenCV
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Vorverarbeitung von Wikipedia-Dump-Dateien und gemeinsame Nutzung großer Datenmengen mit MeCab
Lesen Sie das Diagrammbild mit OpenCV und ermitteln Sie die Koordinaten des Endpunkts des Diagramms
Trennung von Design und Daten in matplotlib
Einfache Einführung in die Python3-Serie und OpenCV3
Datenbereinigung offener Daten zur Ereignissituation des Ministeriums für Gesundheit, Arbeit und Soziales
Python: Vorverarbeitung beim maschinellen Lernen: Umgang mit fehlenden / Ausreißern / unausgeglichenen Daten
Verwenden Sie Pillow, um das Bild transparent zu machen und nur einen Teil davon zu überlagern
[Kaggle] Vom Lesen der Daten bis zur Vorverarbeitung und Codierung
Generieren und veröffentlichen Sie Dummy-Bilddaten mit Django
Glättung von Zeitreihen und Wellenformdaten 3 Methoden (Glättung)
Python-Entwicklungsumgebung - Verwendung von Pyenv und Virtualenv-
Verwendung vergangener Wetterdaten 1 (Amedas Punktanzeige)
Wavelet-Konvertierung von Bildern mit PyWavelets und OpenCV
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
cv2-Funktionen und Datentypen (OpenCV-Python-Bindung)
[Python + OpenCV] Malen Sie den transparenten Teil des Bildes weiß
Verwendung für Python-Stapel und -Warteschlangen (Geschwindigkeitsvergleich jeder Datenstruktur)
Bild der Schließung
Analyse von Finanzdaten durch Pandas und deren Visualisierung (2)
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure
Analyse von Finanzdaten durch Pandas und deren Visualisierung (1)
Generieren Sie aus Textdaten ein vertikales Bild eines Romans
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Übersicht und Tipps von Seaborn mit statistischer Datenvisualisierung
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Verwenden wir die offenen Daten von "Mamebus" in Python
EP 7 Listenverständnisse anstelle von Karte und Filter verwenden
Geben Sie die Bilddaten mit Flask of Python zurück und zeichnen Sie sie in das Canvas-Element von HTML
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.