I'm starting with opencv in python and I have a questions about how mask is applied for
bitwise_and(src1, src2, mask=mask)
Which of these describes the implementation:
A. all bitwise, mask first
B. all bitwise, images first
C. conditional AND
I would think the performance characteristics of each could vary slightly.
Which of these (or how else) is the actual implementation? (and why, if I may ask)
I was trying to look at the source, but couldn't quite make out what they did: https://github.com/opencv/opencv/blob/ca0b6fbb952899a1c7de91b909d3acd8e682cedf/modules/core/src/arithm.cpp
I have worked out two implementations of cv2.bitwise_and()
using color images and binary images.
1. Using Binary Images
Let us assume we have the following binary images:
Screen 1:
Screen 2:
Upon performing bitwise:
fin = cv2.bitwise_and(screen1, screen2)
cv2.imwrite("Final image.jpg", fin)
we obtain the following:
2. Performing masking on color images:
You can mask out a certain region of a given color image using the same function as well.
Consider the following image:
and consider Screen 1 (given above) to be the mask
fin = cv2.bitwise_and(image, image, mask = screen1)
cv2.imwrite("Masked image.jpg", fin)
gives you:
Note: While performing bitwise AND operation the images must have the same size
If you look at the docs, the 3rd parameter is a destination image which you missed.
This operation will change the values of the destination image only if the mask says so (in this case it will do the bitwise and of the two source images). For the pixels that are not in the mask, the destination will contain the same values that it contained before.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With