Ich versuche, eine Farbmaske auf ein Farbbild anzuwenden. Die Farbmaske ist eine Kontur, die ich auf das Farbbild anwenden möchte. Die Maske ist komplett schwarz bis auf den Umriss, der rosa ist (BGR = [180, 105,255]
). Seltsamerweise kann ich einen Umriss, der cyan ist [227,230,49]
mit der folgenden Methode anwenden:OpenCV - Farbmaske auf Farbbild anwenden
Lassen Sie das Farbbild imgColor
und die Cyan Outline sein maskCyan
. Auch diese Maske ist schwarz [0,0,0]
mit Ausnahme der Pixel, die Teil der Gliederung sind, die [227,230,49]
sind. Dann kann ich dies über das Bild anwenden, indem ich einfach imgColor_with_cyan_outline = cv2.bitwise_or(imgColor, maskCyan)
mache. Wenn ich das selbe mit maskPink
mache, das rosa Pixel anstelle von cyan hat, imgColor_with_pink_outline = cv2.bitwise_or(imgColor, maskPink)
verwendend, dann werde ich das ursprüngliche Bild ohne irgendeine Maske oder Kontur zurückbringen, die auf es angewendet werden. Ich glaube, ich verstehe nur nicht, wie funktioniert cv2.bitwise_or()
, aber ich bin mir nicht sicher.
Gibt es eine andere Möglichkeit, eine Farbmaske auf ein Farbbild anzuwenden?
Mögliche Duplikat [Kopieren Werte von einer numpy Matrix zu einem anderen abhängig von boolean Maske] lesen (https://stackoverflow.com/questions/22255368/copying-values-from-one-numpy-matrix-in-another-dependent-on-boole-an-) –
bitweise oder -> nimmt jedes Bit und tun ODER mit der dasselbe Bit im anderen Bild. Wenn Sie zum Beispiel Pixel 63 in einem Bild und 255 in einem anderen Bild haben, ergibt das 255. Wenn Sie 63 und 72 haben, ergibt das 127 (63 ist 00111111 und 72 bin 01001000 im Binärformat). Sie können und mit der Umkehrung der Maske als binäre (weiß und schwarz), um das Pixel zu "entfernen", oder drehen Sie sie schwarz aus dem Bild. Dann fügen Sie es mit dem Cyan ein und Sie erhalten den Cyan im Bild, oder verwenden Sie numpy als @ DanMašek Link ersetzen – api55