Leichte Bildverarbeitung mit Python x OpenCV

Dies ist ein Artikel von ZOZO Technologies # 1 Adventskalender 2019. Gestern war "Kenntnisse erforderlich, wenn ein Mac in einem Windows-Team verwendet wird" von @e_tyubo. Ich habe auch viele Möglichkeiten, mehrere Betriebssysteme richtig zu verwenden, daher war es sehr hilfreich. Ich wurde als "spielerischer Ingenieur, der eine Drohne ins Entwicklungslager bringt" vorgestellt, aber dieses Mal möchte ich einen soliden Inhalt schreiben, der näher an der Arbeit liegt lol

Das Smart Factory-Team, dem ich angehöre, ist für die Geschäftsverbesserung und -automatisierung im Bekleidungsproduktionsprozess verantwortlich. Unter ihnen gibt es viele bildverarbeitungsbezogene Projekte, und die Genres variieren von geschäftsorientierten Inhalten bis zu forschungsorientierten Inhalten.

Bei der Entwicklung auf der Grundlage derart unterschiedlicher Anforderungen wird der Entwicklung Vorrang eingeräumt, indem beurteilt wird, "ob Effizienz und Automatisierung überhaupt erforderlich sind", "ob sie sofort realisiert werden können" und "ob ein Geschäftsvorteil besteht". Sie müssen verschreiben.

Da es jedoch in der Bekleidungsindustrie ursprünglich nur wenige Fälle und Daten für die Automatisierung gibt, ist es nicht ungewöhnlich, herauszufinden, ob Sie es nicht versuchen. Daher muss es nicht 100% sein, daher ist es praktisch, einige Indexergebnisse zu haben.

Dieses Mal werde ich die Verarbeitung vorstellen, mit der die Ergebnisse beim Prototyping in den oben genannten Situationen angezeigt werden. Wenn Sie dem Unternehmen zu nahe stehen, kann es schwierig sein, den Inhalt zu veröffentlichen. In diesem Artikel wird daher nur auf die grundlegende Verarbeitung eingegangen.

Bildeingabe / -ausgabe

Wenn ich die Bildverarbeitung experimentell versuche, erstelle ich im Arbeitsbereich einen "Datenordner" und einen "Ergebnisordner" sowie die Eingabe und Ausgabe in diesen Ordnern. Für mich persönlich ist es einfacher, nur die Bilder, die ich verarbeiten möchte, in einen Ordner zu legen und zu verarbeiten. Deshalb nehme ich dieses Formular an.

Quellcode


import os.path
import datetime

import cv2

#Konstante
#Datenordner
DATA_PATH = "data"
#Ergebnisordner
RESULT_PATH = "result"


def main():
    #Holen Sie sich das aktuelle Verzeichnis
    current_path = os.getcwd()

    #Datenverzeichnis abrufen
    data_path = os.path.join(current_path, DATA_PATH)
    #Datenverzeichnis abrufen
    result_path = os.path.join(current_path, RESULT_PATH)
    #Holen Sie sich eine Liste der Dateien direkt unter dem Verzeichnis
    data_list = os.listdir(data_path)

    for file in data_list:

        #Dateierweiterung abrufen
        file_name, ext = os.path.splitext(file)

        #Wenn die Erweiterung PNG oder JPEG ist
        if ext == u'.png' or ext == u'.jpg' or ext == u'.jpeg':
            #Bild laden
            input_path = os.path.join(data_path, file)
            image = cv2.imread(cv2.samples.findFile(input_path))
            
            #Schreiben Sie hier etwas Verarbeitung

            #Benannt nach Zeit, damit der Dateiname nicht abgedeckt wird
            output_path = os.path.join(result_path, create_time_path(file_name, "Erweiterung"))
            #Bild speichern
            cv2.imwrite(output_path, "Ausgabebild")

    return

#Geben Sie einen eindeutigen Dateipfad einschließlich der Zeit aus
def create_time_path(file_name, ext):
    #Holen Sie sich die aktuelle Zeit
    time = datetime.datetime.now()
    #Erstellen Sie einen Pfad
    path = file_name + time.strftime("%Y%m%d%H%M%S") + ext

    return path


if __name__ == '__main__':
    main()

Glättung des Gaußschen Filters

Der Gaußsche Filter verwendet die Gaußsche Verteilung, um Gewichte hinzuzufügen, je nachdem, wie weit sie vom interessierenden Pixel entfernt sind. Je größer der Standardabweichungswert ist, desto größer ist der Effekt der Glättung.

Vor der Hauptverarbeitung eines verrauschten Bildes wird es als Vorbereitung angewendet. Passen Sie die Kernelgröße an die Art des zu verarbeitenden Bildes an.

Quellcode

#Gaußsche Filterkerngröße(Seltsam)
GAUSSIAN_KERNEL = (5, 5)

#Gaußscher Filter
def exc_gaussian_blur(image):
    #Wenden Sie den Gaußschen Filter an
    gaussian_image = cv2.GaussianBlur(image, GAUSSIAN_KERNEL, 0)

    return gaussian_image

Ausführungsergebnis

Das Originalbild

Lennagrey.png

Nachbearbeitetes Bild

ガウシアン.png

Kantenerkennungsprozess Canny

Um den Inhalt kurz zu erläutern, wird die Verarbeitung im Ablauf von "(1) Rauschreduzierung und -differenzierung", "(2) Erfassung der maximalen Position des Gradienten" und "(3) Schwellenwertverarbeitung" durchgeführt. Das Ausgabeergebnis ändert sich je nach Einstellwert. Passen Sie es daher an die Art des Bildes an, das Sie verarbeiten möchten.

Quellcode

#Mindestschwelle für die Erkennung kniffliger Kanten
CANNY_MIN = 100
#Maximaler Schwellenwert für die Erkennung kniffliger Kanten
CANNY_MAX = 150

#Funktion zur Erzeugung von Kantenbildern
def exc_canny_blur(image):
    #Canny-Filter anwenden
    edgeImg = cv2.Canny(image, CANNY_MIN, CANNY_MAX)

    return edgeImg

Ausführungsergebnis

Das Originalbild

Lennagrey.png

Nachbearbeitetes Bild

キャニー.png

Expansionsprozess

Ein Prozess, der dem Zielpixel ein Pixel hinzufügt, das den Hintergrund oder das Loch des Bildes berührt. Es wird häufig zusammen mit der Schrumpfungsverarbeitung verwendet, hauptsächlich zur Geräuschreduzierung.

Quellcode

#Kernelgröße des Erweiterungs- / Reduktionsfilters
MAX_MIN_KERNEL = (10, 10)
#Ausführungszahl des Erweiterungs- / Reduktionsfilters
MAX_MIN_ITERATION = 10

#Erweiterungsverarbeitungsfunktion
def exc_dilate(image):
    #Expansionsfilteranwendung
    dstImg = cv2.dilate(image, MAX_MIN_KERNEL, MAX_MIN_ITERATION)

    return dstImg

Ausführungsergebnis

Das Originalbild

Lennagrey.png

Nachbearbeitetes Bild

膨張.png

Differenzbild zwischen dem Originalbild und dem verarbeiteten Bild

ori-膨張.png

Schrumpfbehandlung

Ein Prozess, bei dem ein Pixel um das Zielpixel entfernt wird, das den Hintergrund oder das Loch des Bildes berührt. Es wird häufig zusammen mit der Schrumpfungsverarbeitung verwendet, hauptsächlich zur Geräuschreduzierung.

Quellcode

#Kernelgröße des Erweiterungs- / Reduktionsfilters
MAX_MIN_KERNEL = (10, 10)
#Ausführungszahl des Erweiterungs- / Reduktionsfilters
MAX_MIN_ITERATION = 10

#Schrumpfungsbearbeitungsfunktion
def exc_erode(image):
    #Schrumpffilteranwendung
    dstImg = cv2.erode(image, MAX_MIN_KERNEL, MAX_MIN_ITERATION)

    return dstImg

Ausführungsergebnis

Das Originalbild

Lennagrey.png

Nachbearbeitetes Bild

収縮.png

Differenzbild zwischen dem verarbeiteten Bild und dem Originalbild

縮小-ori.png

Affin-Konvertierung

Es bezieht sich auf eine Transformation, die eine beliebige lineare Transformation und eine parallele Bewegung kombiniert. Ich benutze es oft, um Bilder zu drehen.

Quellcode

#Affin-Konvertierung
def exc_affine(dx, dy, image):
    #Affin-Konvertierung(Parallelbewegung)
    affine_mat = np.float32([[1, 0, dx], [0, 1, dy]])
    height, width = image.shape[:2]
    image_affine = cv2.warpAffine(image, affine_mat, (width, height))

    return image_affine


#Bilddrehung
def exc_rotation(angle, scale, image):
    #Holen Sie sich die mittlere Position
    center = tuple(np.array([image.shape[1] * 0.5, image.shape[0] * 0.5]))
    #Berechnung der Rotationsumwandlungsmatrix
    affine_mat = cv2.getRotationMatrix2D(center, angle, scale)
    #Affin-Konvertierung(Drehung)
    height, width = image.shape[:2]
    rotation_image = cv2.warpAffine(image, affine_mat, (width, height), cv2.INTER_CUBIC)

    return rotation_image

Ausführungsergebnis

Das Originalbild

Lennagrey.png

Bildparallele Bewegung nach der Verarbeitung

Wenn Sie 100 vertikal und horizontal bewegen. アフィン_100_100.png

Bildrotation nach der Verarbeitung

回転.png

Nachbearbeitete Bildskalierung

Setzen Sie den Skalierungsstatus auf 10. スケール10.png

abschließend

Die oben eingeführte Verarbeitung wird je nach Zielbild in verschiedenen Kombinationen verwendet. Sie können auf verschiedene Szenen reagieren, indem Sie die Kombination ändern. Passen Sie sie daher bitte selbst an.

ZOZO Technologies # 1 Adventskalender 2019 Morgen ist "Berechnen mit Rost" von @ niba1122.

Recommended Posts

Leichte Bildverarbeitung mit Python x OpenCV
Bildverarbeitung mit Python
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildverarbeitung mit Python (Teil 2)
"Apple-Verarbeitung" mit OpenCV3 + Python3
Bildbearbeitung mit Python OpenCV
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
[Python] Bildverarbeitung mit Scicit-Image
Grundlagen der Echtzeit-Bildverarbeitung mit opencv
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Finden Sie Bildähnlichkeit mit Python + OpenCV
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Grundlagen der binärisierten Bildverarbeitung durch Python
100 Bildverarbeitung mit Python Knock # 8 Max Pooling
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
Bildaufnahme von der Kamera mit Python + OpenCV
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Bildverarbeitung mit Lambda + OpenCV (graue Bilderzeugung)
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
Bildverarbeitung mit MyHDL
Binarisierung mit OpenCV / Python
Erste Python-Bildverarbeitung
Bildverarbeitung mit PIL
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
XavierNX beschleunigt die OpenCV-Bildverarbeitung mit GPU (CUDA)
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
So beschneiden Sie ein Bild mit Python + OpenCV
Bildverarbeitung von Grund auf mit Python (4) Konturextraktion
Bildverarbeitung mit Python Environment Setup für Windows
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
100 Sprachverarbeitungsklopfen mit Python 2015
x86-Compiler selbst erstellt mit Python
Bildverarbeitung mit PIL (Pillow)
Hellblau mit AtCoder @Python
Hinweise zur HDR- und RAW-Bildverarbeitung mit Python
Kameraerfassung mit Python + OpenCV
Akustische Signalverarbeitung mit Python (2)
Sortieren von Bilddateien mit Python (2)
Sortieren von Bilddateien mit Python (3)
Tweet mit Bild in Python
Bilddateien mit Python sortieren
Gesichtserkennung mit Python + OpenCV
Bildverarbeitung mit Python (Pillow)
Bildverarbeitungssammlung in Python
JPEG-Bilderzeugung durch Angabe der Qualität mit Python + OpenCV
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ② Erstellen Sie Photoshop-Standbilder
Holen Sie sich Bildfunktionen mit OpenCV
Verwenden von OpenCV mit Python @Mac
Bilderkennung mit Keras + OpenCV
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
[Python] Mit OpenCV können Sie problemlos Bilddateien mit Seriennummern lesen
Leuchtendes Leben mit Python und OpenCV
Schneiden Sie ein Bild mit Python aus
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
[Python] Einfache Parallelverarbeitung mit Joblib