[PYTHON] Comment obtenir des histogrammes RVB et HSV avec OpenCV

introduction

Je travaille avec des images et je voulais utiliser les informations des histogrammes RVB et HSV comme fonctionnalités. J'ai donc essayé d'extraire l'histogramme en utilisant ** OpenCV **. Je vais le laisser comme mémo.

histogramme

Un diaphragme peut être considéré comme un graphique ou un tracé pour connaître la distribution globale des valeurs de pixel dans une image. En général, l'axe horizontal est la valeur du pixel et l'axe vertical est la fréquence d'apparition de la valeur du pixel. La visualisation de l'histogramme est une façon de comprendre l'image. `

Quelle est la différence entre RVB et HSV?

RGB

RVB est un acronyme pour le rouge, le vert et le bleu, respectivement. Ces trois couleurs sont appelées les «trois couleurs primaires de la lumière» et peuvent être utilisées avec des tubes bruns, des moniteurs à cristaux liquides, etc. C'est une méthode pour exprimer. Puisque 256 niveaux d'obscurité peuvent être définis pour chaque couleur primaire, il est possible d'exprimer 16 777 216 couleurs différentes de 256 cubes.

HSV

HSV est une méthode d'expression de la couleur avec trois éléments: teinte, saturation et valeur / luminosité. ** Hue **: anneau de teinte (anneau de teinte) La forme de l'anneau ou affiché dans la plage de 0 à 360 degrés ** Saturation **: Degré de vivacité de la couleur: Plus la valeur est basse, plus la saturation est basse et plus la valeur est élevée, plus la saturation est élevée. ** Luminosité **: Degré de luminosité de la couleur: lorsque la valeur est faible, elle devient sombre et lorsqu'elle est élevée, elle devient lumineuse.

Chargement des images

C'est un point à noter lors du chargement d'une image.

1. Chargement avec OpenvCV

import cv2

img = cv2.imread("sample.jpg ")

Dans ce cas, img est «BGR». Si vous souhaitez convertir en «RVB», vous pouvez le convertir par la méthode suivante.

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

2. Chargement avec oreiller

from PIL import Image

img = Image.open("sample.jpg ")

Lors de la lecture avec un oreiller, il peut être lu avec RGB

Une fonction qui renvoie RVB et HSV en spécifiant une image

Implémentation d'une fonction qui renvoie un histogramme de R, G, B, H, S, V lorsqu'une image est passée en Python. Le résultat de l'exécution avec jupyter est également affiché.


def show_img(path):

    img = cv2.imread(path)
    b, g, r = img[:,:,0], img[:,:,1], img[:,:,2]
    hist_b = cv2.calcHist([b],[0],None,[256],[0,256])
    hist_g = cv2.calcHist([g],[0],None,[256],[0,256])
    hist_r = cv2.calcHist([r],[0],None,[256],[0,256])
    plt.plot(hist_r, color='r', label="r")
    plt.plot(hist_g, color='g', label="g")
    plt.plot(hist_b, color='b', label="b")
    plt.legend()
    plt.show() 
    img2 = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    h, s, v = img2[:,:,0], img2[:,:,1], img2[:,:,2]
    hist_h = cv2.calcHist([h],[0],None,[256],[0,256])
    hist_s = cv2.calcHist([s],[0],None,[256],[0,256])
    hist_v = cv2.calcHist([v],[0],None,[256],[0,256])
    plt.plot(hist_h, color='r', label="h")
    plt.plot(hist_s, color='g', label="s")
    plt.plot(hist_v, color='b', label="v")
    plt.legend()
    plt.show()
    
    return hist_r,hist_g, hist_b, hist_h, hist_s, hist_v

Cette fois, je vais essayer avec l'image suivante du chien. dog.jpeg

r,g,b,h,s,v = show_img("dog.jpeg ")

Screenshot from 2020-01-20 08-45-48.png

À propos du calcul de l'histogramme

OpenCV utilise les fonctions suivantes pour calculer l'histogramme.

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

** images **: Images d'entrée. Le type de données de la valeur de pixel est uint8 ou float32. Utilisez le symbole [] pour spécifier quelque chose comme «[img]». ** canaux **: Index du canal de l'image pour lequel l'histogramme est calculé. Si l'image d'entrée est une image élégante, spécifiez [0]. S'il s'agit d'une image couleur, spécifiez l'une des valeurs [0], [1] et [2] correspondant aux teintes de B, V et R pour lesquelles l'histogramme est calculé. ** mask **: Ceci est une image de masque. Spécifiez «Aucun» pour calculer l'histogramme de tous les pixels de l'image. Pour calculer l'histogramme d'une zone spécifique de l'image, spécifiez une image de masque qui représente la zone spécifique (un exemple est illustré ci-dessous). ** histSize **: Le nombre de bacs. Cet argument est également spécifié à l'aide du symbole []. Spécifiez [256] si vous souhaitez cibler toutes les valeurs de pixel. ** plages **: RANGE qui représente la plage de valeurs de pixels pour laquelle vous souhaitez mesurer l'histogramme. Normalement, spécifiez [0,256].

Les références

Recommended Posts

Comment obtenir des histogrammes RVB et HSV avec OpenCV
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Comment vérifier la version d'opencv avec python
Comment utiliser is et == en Python
Comment dessiner une image OpenCV avec Pygame
Comment obtenir un nom de colonne et un nom d'index spécifiques avec Pandas DataFrame
Comment obtenir la différence de date et d'heure en secondes avec Python
Comment générer une séquence en Python et C ++
Comment obtenir les résultats de l'identifiant dans Celery
Comment obtenir de l'aide dans un shell interactif
Comment obtenir les fichiers dans le dossier [Python]
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment obtenir le nom de la variable lui-même en python
Autoriser Keras 2.0 et OpenCV 3.2 à fonctionner dans un environnement GPU
Comment obtenir plusieurs objets de modèle au hasard dans Django
Comment définir Decorator et Decomaker avec une seule fonction
Comment faire du zéro-padding sur une ligne avec OpenCV
Comment boucler et lire une vidéo gif avec openCV
Comment utiliser Decorator dans Django et comment le créer
Comment développer en Python
Convertissez RVB et HSV sous une forme divisible avec PyTorch
Comment se débarrasser des pictogrammes personnalisés du serveur dans message.content
[Go language] Comment obtenir l'entrée du terminal en temps réel
Comment échanger des éléments dans un tableau en Python et comment inverser un tableau.
Les étrangers parlent: Comment nommer les classes et les méthodes en anglais
Comment utiliser pyenv et pyenv-virtualenv à votre manière
J'ai essayé "Comment obtenir une méthode décorée en Python"
Comment créer et utiliser des bibliothèques statiques / dynamiques en langage C
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Comment obtenir une liste d'exceptions intégrées pour python
[Blender] Comment gérer les événements de souris et de clavier dans les scripts Blender
[TF] Comment charger / enregistrer le modèle et le paramètre dans Keras
Gestion de l'espace colorimétrique HSV inférieur et supérieur dans OpenCV
Comment obtenir un aperçu de vos données dans Pandas
Comment exécuter des commandes et des scripts shell externes en python
Comment créer une trame de données et jouer avec des éléments avec des pandas
[Shell] Comment obtenir la branche distante par défaut avec Git
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Comment mettre à jour automatiquement la description de l'App Store dans Google Spreadsheets et Fastlane
[Python] Comment faire PCA avec Python
Comment obtenir et définir le nom du serveur NTP par DHCP
Comment comparer des listes et récupérer des éléments communs dans une liste
Comment installer et utiliser Tesseract-OCR
Comment utiliser les classes dans Theano
Comment écrire sobrement avec des pandas
Comment obtenir toutes les valeurs possibles dans une expression régulière
Comment collecter des images en Python
Repeated @ app.callback dans Dash Comment écrire correctement l'entrée et l'état
Comment mettre à jour Spyder dans Anaconda
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Comment utiliser SQLite en Python
[Python] Comment obtenir le premier et le dernier jour du mois
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
Comment obtenir la version Python
Comment installer OpenCV sur Mac
Comment convertir 0,5 en 1056964608 en un seul coup