2017-12-17 5 views
0

Ich habe ein Bild img. Ich habe auch eine Maske mit dem Wert 255 an allen Stellen, an denen ich die Pixelwerte von img beibehalten möchte, sind 0 an allen anderen Stellen.Wie setze ich die binäre Maske in OpenCV python korrekt?

Ich möchte diese zwei Bilder viz verwenden. der Maske und img so, dass ich eine Matrix mit Original img Werten an Stellen, wo die Maske 255 zu erstellen, und der Wert -1 an allen Orten, an denen Maske 0.

So ist weit, ich habe dies geschrieben:

aber der maskedImg hat 0 an allen Stellen, an denen die Maske 0 ist. Wie kann ich den Wert -1 anstelle von 0 an allen anderen Stellen mit einer schnellen bitweisen Operation erhalten?

+1

Swap die Maske um (bitweise nicht) und bit- oder es mit dem Bild –

+0

@MadPhysicist danke für den Kommentar. Wenn ich die Maske und die oder die Maske mit dem Bild vertausche, habe ich an allen Stellen außerhalb der Maske den Wert 255. Ich möchte den Wert -1 an all diesen anderen Orten außerhalb der Maske. –

+2

nicht sicher, warum Sie -1 bevorzugen ... aber OpenCV verwendet in der Regel Uint8 für die meisten Bilder, einschließlich Masken, so müssen Sie wahrscheinlich den Typ zu ändern, bevor ... -1 – api55

Antwort

2

Ich weiß nicht, was ist der Bildtyp Ihres Bildes. Der Standardwert ist np.uint8. Sie können also -1 nicht auf das Ergebnis setzen, da er unter -1 + 256 = 255 liegt. Das heißt, wenn der D-Typ np.uint8 ist, können Sie ihn nicht auf einen negativen Wert setzen.

Wenn Sie auf -1 setzen möchten, sollten Sie die dtype ändern.

#masked = cv2.bitwise_and(img, mask).astype(np.int32) 
masked = np.int32(img) 
masked[mask==0] = -1 
Verwandte Themen