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.
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. `
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.
C'est un point à noter lors du chargement d'une image.
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)
from PIL import Image
img = Image.open("sample.jpg ")
Lors de la lecture avec un oreiller, il peut être lu avec RGB
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.
r,g,b,h,s,v = show_img("dog.jpeg ")
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].
[Hystertic partie 1: calculer, tracer et analyser !!!](http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc /py_histograms/py_histogram_begins/py_histogram_begins.html)
Recommended Posts