How can I change the background of only white pixels?

Question:

I have two grayscale images of the same size, one of them is this one: enter image description here

I’m trying to add a background to this image, which is to just change the white pixels to the respective pixels in the other picture. The best result I’ve managed to do is just a bitwise and of all the pixels of both pictures but the resultant picture is distorted inside James Bond. I also tried a weighted add between the two pictures but when I increase the weight of the James Bond image, it’s white pixels are visible in the resultant image.

Asked By: ninesalt

||

Answers:

To combine with a second image, ensure that both images have the same dimensions (which yours do). They can then be combined

import cv2

img_jb = cv2.imread('james_bond.png')    
img_007 = cv2.imread('007_logo.png')

height, width, channels = img_jb.shape
img_007_resized = cv2.resize(img_007, (width, height), interpolation=cv2.INTER_CUBIC)

threshold = img_jb > 240
img_jb[threshold] = img_007_resized[threshold]

cv2.imwrite('james_bond_logo.png', img_jb)

Giving you:

combined image

numpy allows you to work on the indexes of an array that match a given criteria. This has the effect of copying pixels from the background image into the foreground image where the foreground image has a value above 240.

Answered By: Martin Evans
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.