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.
Les filtres introduits cette fois sont les suivants.
La matrice pour effectuer divers processus de filtrage est appelée le noyau. Le programme effectue le traitement suivant pour chaque filtre.
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)
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.
** L'image d'origine **
** niveaux de gris **
** Filtre dégradé (3x3) **
** Filtre dégradé (5x5) **
** Filtre passe-haut **
** Filtre laplacien (3x3) **
** Filtre laplacien (5x5) **
** Filtre gaussien **