[PYTHON] Effectuer divers filtrages avec OpenCV (Gradient, Highpass, Laplacian, Gaussian)

introduction

OpenCV (Open Source Computer Vision Library) est une collection de bibliothèques de traitement vidéo / image sous licence BSD. Il existe de nombreux algorithmes tels que le filtrage d'images, la mise en correspondance de modèles, la reconnaissance d'objets, l'analyse vidéo et l'apprentissage automatique.

Exemple de suivi de mouvement avec OpenCV (OpenCV Google Summer of Code 2015) https://www.youtube.com/watch?v=OUbUFn71S4s

Cliquez ici pour l'installation et une utilisation facile http://qiita.com/olympic2020/items/d5d475a446ec9c73261e

Cliquez ici pour filtrer les images fixes Essayez la détection des bords avec OpenCV

Cliquez ici pour traiter les fichiers vidéo Essayez de convertir des vidéos en temps réel avec OpenCV Essayez de convertir des vidéos de caméra Web / caméra vidéo en temps réel avec OpenCV

Cette fois, j'appliquerai différents filtres.

Différents filtres

Les filtres introduits cette fois sont les suivants.

programme

La matrice pour effectuer divers processus de filtrage est appelée le noyau. Le programme effectue le traitement suivant pour chaque filtre.

  1. Définissez le noyau
  2. Appliquez cv2.filter2D ()
  3. Enregistrer dans un fichier

filter.py


import cv2
import numpy as np


#Définition constante
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 "

#Chargez l'image d'origine
img_org = cv2.imread(FILE_ORG, cv2.IMREAD_COLOR)

#Conversion de l'échelle de gris
img_gray = cv2.cvtColor(img_org, cv2.COLOR_BGR2GRAY)
cv2.imwrite(FILE_GRAY, img_gray)

#Filtre dégradé (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)

#Filtre dégradé (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)

#Filtre passe-haut
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)

#Filtre laplacien (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)

#Filtre laplacien (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)

#Filtre gaussien
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)

Résultat d'exécution

C'est une image du résultat de l'exécution. Le filtre 3x3 capture nettement les bords du bâtiment. D'autre part, le filtre 5x5 capture de grands changements dans le paysage.

img.png ** L'image d'origine **

gray.png ** niveaux de gris **

gradient3x3.png ** Filtre dégradé (3x3) **

gradient5x5.png ** Filtre dégradé (5x5) **

highpass.png ** Filtre passe-haut **

laplacian3x3.png ** Filtre laplacien (3x3) **

laplacian5x5.png ** Filtre laplacien (5x5) **

gaussian.png ** Filtre gaussien **

Recommended Posts

Effectuer divers filtrages avec OpenCV (Gradient, Highpass, Laplacian, Gaussian)
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Extraire des arêtes avec OpenCV (Laplacian, Sobel, Canny)
Extraction de bords avec python + OpenCV (filtre Sobel, filtre laplacien)