[PYTHON] Führen Sie verschiedene Filterungen mit OpenCV durch (Gradient, Highpass, Laplace, Gauß).

Einführung

OpenCV (Open Source Computer Vision Library) ist eine Sammlung von BSD-lizenzierten Video- / Bildverarbeitungsbibliotheken. Es gibt viele Algorithmen wie Bildfilterung, Vorlagenabgleich, Objekterkennung, Videoanalyse und maschinelles Lernen.

Beispiel für Bewegungsverfolgung mit OpenCV (OpenCV Google Summer of Code 2015) https://www.youtube.com/watch?v=OUbUFn71S4s

Klicken Sie hier für die Installation und einfache Verwendung http://qiita.com/olympic2020/items/d5d475a446ec9c73261e

Klicken Sie hier, um Standbilder zu filtern Versuchen Sie die Kantenerkennung mit OpenCV

Klicken Sie hier, um Videodateien zu verarbeiten Versuchen Sie, Videos in Echtzeit mit OpenCV zu konvertieren Versuchen Sie, Webkamera- / Videokamera-Videos in Echtzeit mit OpenCV zu konvertieren

Dieses Mal werde ich verschiedene Filter anwenden.

Verschiedene Filter

Die diesmal eingeführten Filter sind wie folgt.

Programm

Die Matrix zum Durchführen verschiedener Filterprozesse wird als Kernel bezeichnet. Das Programm führt für jeden Filter die folgende Verarbeitung durch.

  1. Definieren Sie den Kernel
  2. Wenden Sie cv2.filter2D () an
  3. In Datei speichern

filter.py


import cv2
import numpy as np


#Konstante Definition
FILE_ORG = "img.png "
FILE_GRAY = "gray.png "
FILE_GRADIENT = "gradient.png "
FILE_HIGH_PASS = "highpass.png "
FILE_LAPLACIAN_3x3 = "laplacian3x3.png "
FILE_LAPLACIAN_5x5 = "laplacian5x5.png "
FILE_GAUSSIAN = "gaussian.png "

#Laden Sie das Originalbild
img_org = cv2.imread(FILE_ORG, cv2.IMREAD_COLOR)

#Graustufenumwandlung
img_gray = cv2.cvtColor(img_org, cv2.COLOR_BGR2GRAY)
cv2.imwrite(FILE_GRAY, img_gray)

#Verlaufsfilter (3x3)
kernel_gradient_3x3 = np.array([
                            [ 1,  1,  1],
                            [ 0,  0,  0],
                            [-1, -1, -1]
                            ], np.float32)
img_gradient_3x3 = cv2.filter2D(img_gray, -1, kernel_gradient_3x3)
cv2.imwrite(FILE_GRADIENT_3x3, img_gradient_3x3)

#Verlaufsfilter (5x5)
kernel_gradient_5x5 = np.array([
                            [ 5,  5,  5,  5,  5],
                            [ 3,  3,  3,  3,  3],
                            [ 0,  0,  0,  0,  0],
                            [-3, -3, -3, -3, -3],
                            [-5, -5, -5, -5, -5]
                            ], np.float32)
img_gradient_5x5 = cv2.filter2D(img_gray, -1, kernel_gradient_5x5)
cv2.imwrite(FILE_GRADIENT_5x5, img_gradient_5x5)

#Hochpassfilter
kernel_high_pass = np.array([
                            [-1, -1, -1],
                            [-1,  8, -1],
                            [-1, -1, -1]
                            ], np.float32)
img_high_pass = cv2.filter2D(img_gray, -1, kernel_high_pass)
cv2.imwrite(FILE_HIGH_PASS, img_high_pass)

#Laplace-Filter (3x3)
kernel_laplacian_3x3 = np.array([
                            [1,  1, 1],
                            [1, -8, 1],
                            [1,  1, 1]
                            ], np.float32)
img_laplacian_3x3 = cv2.filter2D(img_gray, -1, kernel_laplacian_3x3)
cv2.imwrite(FILE_LAPLACIAN_3x3, img_laplacian_3x3)

#Laplace-Filter (5x5)
kernel_laplacian_5x5 = np.array([
                            [-1, -3, -4, -3, -1],
                            [-3,  0,  6,  0, -3],
                            [-4,  6, 20,  6, -4],
                            [-3,  0,  6,  0, -3],
                            [-1, -3, -4, -3, -1]
                            ], np.float32)
img_laplacian_5x5 = cv2.filter2D(img_gray, -1, kernel_laplacian_5x5)
cv2.imwrite(FILE_LAPLACIAN_5x5, img_laplacian_5x5)

#Gaußscher Filter
kernel_gaussian = np.array([
                            [1,  2, 1],
                            [2,  4, 2],
                            [1,  2, 1]
                            ], np.float32) / 16
img_gaussian = cv2.filter2D(img_gray, -1, kernel_gaussian)
cv2.imwrite(FILE_GAUSSIAN, img_gaussian)

Ausführungsergebnis

Es ist ein Bild des Ausführungsergebnisses. Der 3x3-Filter erfasst die Gebäudekanten scharf. Auf der anderen Seite erfasst der 5x5-Filter große Änderungen in der Landschaft.

img.png ** Das Originalbild **

gray.png ** Graustufen **

gradient3x3.png ** Verlaufsfilter (3x3) **

gradient5x5.png ** Verlaufsfilter (5x5) **

highpass.png ** Hochpassfilter **

laplacian3x3.png ** Laplace-Filter (3x3) **

laplacian5x5.png ** Laplace-Filter (5x5) **

gaussian.png ** Gaußscher Filter **

Recommended Posts

Führen Sie verschiedene Filterungen mit OpenCV durch (Gradient, Highpass, Laplace, Gauß).
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Kanten mit OpenCV extrahieren (Laplace, Sobel, Canny)
Kantenextraktion mit Python + OpenCV (Sobel-Filter, Laplace-Filter)