Ask Your Question
0

Exercise Problem: Bitwise Operations.

asked 2019-01-29 12:00:25 -0600

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...

edit retag flag offensive close merge delete

Comments

probably you look outdated doc. see actual doc and probably you need to change

opencv_logo.png -> opencv-logo-white.png
sturkmen gravatar imagesturkmen ( 2019-01-29 12:32:22 -0600 )edit

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)

berak gravatar imageberak ( 2019-01-29 23:52:24 -0600 )edit

Attn: @berak, @sturkmen. This doesn't wotk under OpenCV 4.0.1. But on samples's folder will work under OpenCV4.0.1.

supra56 gravatar imagesupra56 ( 2019-02-02 07:51:07 -0600 )edit

@supra56, can you be more specific ?

berak gravatar imageberak ( 2019-02-02 08:12:09 -0600 )edit

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'

supra56 gravatar imagesupra56 ( 2019-02-02 08:38:50 -0600 )edit

again, image not loaded. common noob fault. the don't seem to know, what a relative path is.

berak gravatar imageberak ( 2019-02-02 08:43:13 -0600 )edit
1

I know , berak. It is doesn't run under OpenCV 4.0.1. this is samples found under OpenCV's folder. i

f __name__ == "__main__":

    if len(sys.argv) > 1:
        fname = sys.argv[1]
    else:
        fname = 'baboon.jpg'
        print("usage : python dft.py <image_file>")

    im = cv.imread(cv.samples.findFile(fname))

The new one is cv2.sample.findFile()

supra56 gravatar imagesupra56 ( 2019-02-02 08:49:13 -0600 )edit

1 answer

Sort by » oldest newest most voted
0

answered 2019-02-02 11:04:35 -0600

supra56 gravatar image

updated 2019-02-02 11:06:04 -0600

Attn: @berak, @sturkmen. The problem have been solved under OpenCV 4.0.1. There is nothing wrong with source code . The filename doesn't matter. What I did. I copied and pasted it. Then I got an error. Same error as above. What I did I retype instead of copy and paset. So the problem had to be retyped:

img1 = cv2.imread('messi5.jpg')
img2 = cv2.imread('opencv_logo.png')
edit flag offensive delete link more

Comments

If you encounter any problem. Just type instead of copy and paste.

supra56 gravatar imagesupra56 ( 2019-02-02 11:07:17 -0600 )edit

Wow. Thanks for noticing that. What a pain!

sjhalayka gravatar imagesjhalayka ( 2019-02-02 11:11:52 -0600 )edit

@sjhalayka. Yeah. I attempted 5 times. But now, but, now I relalized to type.

supra56 gravatar imagesupra56 ( 2019-02-02 11:21:54 -0600 )edit

@supra56 -- Merci!

sjhalayka gravatar imagesjhalayka ( 2019-02-02 11:39:13 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2019-01-29 12:00:25 -0600

Seen: 714 times

Last updated: Feb 02 '19