Ich beschäftige mich mit Bildern und wollte die Informationen aus RGB- und HSV-Histogrammen als Merkmale verwenden. Also habe ich versucht, das Histogramm mit ** OpenCV ** zu extrahieren. Ich werde es als Memo hinterlassen.
Eine Membran kann als Graph oder Plot betrachtet werden, um die Gesamtverteilung der Pixelwerte in einem Bild zu kennen. Im Allgemeinen ist die horizontale Achse der Pixelwert und die vertikale Achse ist die Häufigkeit des Auftretens des Pixelwerts. Die Visualisierung des Histogramms ist eine Möglichkeit, das Bild zu verstehen. `
RGB
RGB ist eine Abkürzung für Rot, Grün und Blau. Diese drei Farben werden als "drei Primärfarben des Lichts" bezeichnet und können mit braunen Röhren, Flüssigkristallmonitoren usw. verwendet werden. Es ist eine Methode zum Ausdrücken. Da für jede Primärfarbe 256 Dunkelheitsstufen eingestellt werden können, können 16.777.216 verschiedene Farben von 256 Würfeln ausgedrückt werden.
HSV
HSV ist eine Methode zum Ausdrücken von Farbe mit drei Elementen: Farbton, Sättigung und Wert / Helligkeit. ** Farbton **: Farbtonring (Farbtonring) Die Form des Rings oder angezeigt im Bereich von 0 bis 360 Grad ** Sättigung **: Grad der Lebendigkeit der Farbe: Je niedriger der Wert, desto niedriger die Sättigung und je höher der Wert, desto höher die Sättigung. ** Helligkeit **: Helligkeitsgrad der Farbe: Wenn der Wert niedrig ist, wird er dunkel, und wenn er hoch ist, wird er hell.
Beachten Sie beim Laden von Bildern die folgenden Punkte.
import cv2
img = cv2.imread("sample.jpg ")
In diesem Fall ist img "BGR". Wenn Sie in "RGB" konvertieren möchten, können Sie es mit der folgenden Methode konvertieren.
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
from PIL import Image
img = Image.open("sample.jpg ")
Beim Lesen mit Kissen kann es mit RGB
gelesen werden.
Implementierte eine Funktion, die ein Histogramm von R, G, B, H, S, V zurückgibt, wenn ein Bild in Python übergeben wird. Das Ergebnis der Ausführung mit jupyter wird ebenfalls veröffentlicht.
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
Dieses Mal werde ich es mit dem folgenden Bild des Hundes versuchen.
r,g,b,h,s,v = show_img("dog.jpeg ")
OpenCV verwendet die folgenden Funktionen, um das Histogramm zu berechnen.
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
** Bilder **: Eingabebilder. Der Datentyp des Pixelwerts ist entweder uint8 oder float32. Verwenden Sie das Symbol [], um etwas wie "[img]" anzugeben. ** Kanäle **: Index des Kanals des Bildes, für den das Histogramm berechnet wird. Wenn das Eingabebild ein elegantes Bild ist, geben Sie [0] an. Geben Sie für Farbbilder einen der Werte [0], [1] und [2] an, die den Farbtönen von B, G und R entsprechen, für die das Histogramm berechnet wird. ** Maske **: Dies ist ein Maskenbild. Geben Sie "Keine" an, um das Histogramm aller Pixel im Bild zu berechnen. Um das Histogramm eines bestimmten Bereichs im Bild zu berechnen, geben Sie ein Maskenbild an, das den bestimmten Bereich darstellt (ein Beispiel ist unten dargestellt). ** histSize **: Die Anzahl der Fächer. Dieses Argument wird auch mit dem Symbol [] angegeben. Geben Sie [256] an, wenn Sie auf alle Pixelwerte abzielen möchten. ** Bereiche **: BEREICH, der den Bereich der Pixelwerte darstellt, für die Sie das Histogramm messen möchten. Normalerweise geben Sie [0,256] an.
[Hystertischer Teil 1: Berechnen, Plotten und Analysieren !!!](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