Exercise Problem: Bitwise Operations.
The exercise asks: This includes bitwise AND, OR, NOT and XOR operations. They will be highly useful while extracting any part of the image (as we will see in coming chapters), defining and working with non-rectangular ROI etc. Below we will see an example on how to change a particular region of an image.
I want to put OpenCV logo above an image. If I add two images, it will change color. If I blend it, I get an transparent effect. But I want it to be opaque. If it was a rectangular region, I could use ROI as we did in last chapter. But OpenCV logo is a not a rectangular shape. So you can do it with bitwise operations as below:
The code looks like this:
# Load two images
img1 = cv2.imread('messi5.jpg')
img2 = cv2.imread('opencv_logo.png')
# I want to put logo on top-left corner, So I create a ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
# Now create a mask of logo and create its inverse mask also
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# Now black-out the area of logo in ROI
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)
# Take only region of logo from logo image.
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)
# Put logo in ROI and modify the main image
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
However, when you run this error occurs:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-4-054d1eb0b340> in <module>()
2 # Então crio um ROI:
3 rows,cols,channels = img2.shape
----> 4 roi = img1[0:rows, 0:cols ]
TypeError: 'NoneType' object is not subscriptable
I'm new to this type of content and I can not solve it, could anyone help me?
Appreciate...
probably you look outdated doc. see actual doc and probably you need to change
it's the same as always, img1 was not loaded, and you did not check.
(no idea, why python noonbs never understand, that loading an image CAN go wrong, but it clearly is so)
Attn: @berak, @sturkmen. This doesn't wotk under OpenCV 4.0.1. But on samples's folder will work under OpenCV4.0.1.
@supra56, can you be more specific ?
Traceback (most recent call last): File "/home/pi/dummy.py", line 10, in <module> rows,cols,channels = img2.shape AttributeError: 'NoneType' object has no attribute 'shape'
again, image not loaded. common noob fault. the don't seem to know, what a relative path is.
I know , berak. It is doesn't run under OpenCV 4.0.1. this is samples found under OpenCV's folder. i
The new one is
cv2.sample.findFile()