OpenCV erkennt Farben

Ammar Ali 12 April 2022
OpenCV erkennt Farben

In diesem Tutorial wird das Erkennen von Farben in Bildern mit der Funktion inRange() von OpenCV in Python erläutert.

Verwenden Sie die inRange()-Funktion von OpenCV, um Farben auf Bildern in Python zu erkennen

Wir können in einem Bild vorhandene Farben mit der Funktion inRange() von OpenCV erkennen und extrahieren. Manchmal möchten wir aus irgendeinem Grund Farbe aus dem Bild entfernen oder extrahieren.

Wir können die Funktion inRange() von OpenCV verwenden, um eine Farbmaske zu erstellen, oder mit anderen Worten, wir können eine Farbe anhand des Bereichs dieser Farbe erkennen. Die Farben werden in einem RGB-Triplet-Wertformat innerhalb eines Farbbildes gespeichert.

Um seine Maske zu erstellen, müssen wir den RGB-Triplettwert der hellen und dunklen Version dieser Farbe verwenden. Wenn wir beispielsweise in einem BRG-Bild die rote Farbe extrahieren möchten, können wir (0,0,50) für hellrot und (255,50,50) für die dunkelrote Farbe verwenden, um eine rote Maske zu erstellen.

Wir können das Bild und die unteren und oberen BRG-Werte übergeben, um eine Maske zu erstellen.

Lassen Sie uns zum Beispiel ein Bild lesen, das einige Kreise in verschiedenen Farben enthält, und eine Maske in roter Farbe und eine Maske in grüner Farbe erstellen. Siehe Code unten.

import cv2

img = cv2.imread("download.png")

# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))

# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))

cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.waitKey(0)

Ausgabe:

Maske mit Inrange erstellen

Wir können die beiden Masken mit dem Originalbild vergleichen, um festzustellen, ob sie die richtige Farbe enthalten oder nicht. Wir können sehen, dass Maske eins über roter Farbe und Maske zwei über blauer Farbe liegt.

Die Funktion inRange() erstellt ein neues Binärbild ähnlich dem Originalbild. Wie Sie sehen, enthält das Maskenbild nur zwei Farben: Weiß und Schwarz.

Die Funktion inRange() setzt den Wert der Farbe auf 1 oder weiß, wenn die Farbe im angegebenen Farbbereich vorhanden ist, und auf 0, wenn die Farbe im angegebenen Farbbereich nicht vorhanden ist. Das obige Bild war in der BRG-Farbskala.

Aus diesem Grund haben wir BRG-Werte in der Funktion inRange() verwendet, aber wir können Bilder auch in andere Farbskalen wie HSV konvertieren, und in diesem Fall verwenden wir den HSV-Skalenwert, um eine Maske zu erstellen. Lassen Sie uns nun die roten und blauen Farben aus dem Bild extrahieren.

Um die beiden Farben zu extrahieren, müssen wir die beiden Masken kombinieren, um eine einzige Maske mit der Funktion bitwise_or() von OpenCV zu erstellen. Danach können wir die Funktion bitwise_and() von OpenCV verwenden, um die Farben aus dem Bild zu extrahieren, indem wir das Bild als erstes und zweites Argument und die Maske als drittes Argument verwenden.

Siehe Code unten.

import cv2

img = cv2.imread("download.png")

# mask of red color
mask1 = cv2.inRange(img, (0, 0, 50), (50, 50, 255))

# mask of blue color
mask2 = cv2.inRange(img, (50, 0, 0), (255, 50, 50))

# final mask
mask = cv2.bitwise_or(mask1, mask2)
target = cv2.bitwise_and(img, img, mask=mask)

cv2.imshow("Original Image", img)
cv2.imshow("mask red color", mask1)
cv2.imshow("mask blue color", mask2)
cv2.imshow("mask of both colors", mask)
cv2.imshow("target colors extracted", target)
cv2.waitKey(0)

Ausgabe:

Farbe aus Bild extrahieren

Die rote und blaue Farbe wird erfolgreich aus dem angegebenen Bild extrahiert, wie im letzten Bild zu sehen ist. Um einen Farbraum in einen anderen zu konvertieren, können wir die Funktion cvtColor() von OpenCV verwenden.

Wenn wir ein Bild mit HSV-Farbraum haben, müssen wir die HSV-Werte verwenden, um eine Maske zu erstellen. In HSV hat Farbe drei Werte: Farbton, Sättigung und Wert, die die Farbe definieren.

Autor: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Verwandter Artikel - Python OpenCV

Verwandter Artikel - OpenCV Image