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
Quel que soit le type de traitement vidéo que vous effectuez, il est fondamental de filtrer une image. Cette fois, comme base du traitement d'image, je vais séparer l'image couleur en images RVB et les afficher.
Je vais expliquer l'algorithme qui sépare les images couleur en RVB. Tout d'abord, l'image couleur est séparée en RVB. Cela peut être facilement fait avec cv2.split (). Étant donné que l'image séparée est pour un canal, si elle est affichée telle quelle, elle sera affichée sous la forme d'une échelle de gris. Après la séparation en RVB, afin d'afficher dans chaque couleur, il est nécessaire de créer une image couleur dans laquelle les autres couleurs sont complétées par une image remplie de zéro. Numpy.zeros () est utilisé pour créer une image remplie de zéro, et cv2.merge () est utilisé pour combiner 3 canaux en une seule image.
J'ai essayé de faire un diagramme schématique du flux de séparation RVB et d'affichage dans chaque couleur. Veuillez vous y référer pour comprendre le programme.
channels.py
import cv2
import numpy as np
#Définition constante
FILE_PREFIX = "google"
ORG_FILE_NAME = "google_org.png "
BLUE_FILE_NAME = FILE_PREFIX + "_b.png "
GREEN_FILE_NAME = FILE_PREFIX + "_g.png "
RED_FILE_NAME = FILE_PREFIX + "_r.png "
ORG_WINDOW_NAME = "org"
BLUE_WINDOW_NAME = "blue"
GREEN_WINDOW_NAME = "green"
RED_WINDOW_NAME = "red"
#Chargez l'image d'origine
org_img = cv2.imread(ORG_FILE_NAME, cv2.IMREAD_COLOR)
#Tableau d'image rempli de zéro
if len(org_img.shape) == 3:
height, width, channels = org_img.shape[:3]
else:
height, width = org_img.shape[:2]
channels = 1
zeros = np.zeros((height, width), org_img.dtype)
#Séparation RVB
img_blue_c1, img_green_c1, img_red_c1 = cv2.split(org_img)
img_blue_c3 = cv2.merge((img_blue_c1, zeros, zeros))
img_green_c3 = cv2.merge((zeros, img_green_c1, zeros))
img_red_c3 = cv2.merge((zeros, zeros, img_red_c1))
#Créer une fenêtre
cv2.namedWindow(ORG_WINDOW_NAME)
cv2.namedWindow(BLUE_WINDOW_NAME)
cv2.namedWindow(GREEN_WINDOW_NAME)
cv2.namedWindow(RED_WINDOW_NAME)
#Afficher dans la fenêtre
cv2.imshow(ORG_WINDOW_NAME, org_img)
cv2.imshow(BLUE_WINDOW_NAME, img_blue_c3)
cv2.imshow(GREEN_WINDOW_NAME, img_green_c3)
cv2.imshow(RED_WINDOW_NAME, img_red_c3)
#Enregistrer dans un fichier
cv2.imwrite(BLUE_FILE_NAME, img_blue_c3)
cv2.imwrite(GREEN_FILE_NAME, img_green_c3)
cv2.imwrite(RED_FILE_NAME, img_red_c3)
#Terminer le traitement
cv2.waitKey(0)
cv2.destroyAllWindows()
Si vous spécifiez cv2.IMREAD_UNCHANGED dans cv2.imread (), vous pouvez obtenir les informations de 4 canaux avec un plan α. Par contre, si vous spécifiez cv2.IMREAD_COLOR dans cv2.imread (), vous pouvez obtenir les informations de 3 canaux du plan RVB uniquement. Cette fois, j'ai spécifié cv2.IMREAD_COLOR pour obtenir uniquement RVB.
J'ai essayé de séparer l'image originale qui a traité la partie blanche de la page d'accueil de Google en noir avec un script.
** L'image d'origine **
Blue
Green
Red
Recommended Posts