[PYTHON] Séparez les images couleur en images RVB et affichez-les avec OpenCV

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

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.

Algorithme de séparation RVB

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.

separate.png

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.

Résultat d'exécution

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.

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

google_b.png             Blue

google_g.png             Green

google_r.png             Red

Recommended Posts

Séparez les images couleur en images RVB et affichez-les avec OpenCV
Capturer des images avec Pupil, python et OpenCV
Conversion en ondelettes d'images avec PyWavelets et OpenCV
Afficher des images intégrées de mp3 et flac avec mutagène
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
Lisez le fichier VTK et affichez la carte des couleurs avec jupyter.
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Briller la vie avec Python et OpenCV
Charger une image gif avec Python + OpenCV
Dessinez des figures avec OpenCV et PIL
Télécharger et télécharger des images avec Falcon
Essayez de séparer l'arrière-plan et l'objet en mouvement de la vidéo avec OpenCV
[python, openCV] base64 Reconnaissance faciale dans les images
[Python] Lire des images avec OpenCV (pour les débutants)
Importer et exporter des images GeoTiff avec Python
Découpez et connectez des images avec ImageMagick