我需要在第三个图像蒙版的基础上叠加2张图像
示例 1.-我有这个背景
2.-我有这个物体图像,也有解分段图像
我尝试基于第三张图像(蒙版图像)合并Backgound和Object图像
最终结果是背景图像+对象图像(仅基于蒙版) 任何想法.. 我尝试过
import cv2
added_image = cv2.addWeighted(back_img,0.4,aug_demoimage,0.1,0)
但是没有按预期工作。.有任何建议吗?谢谢!
答案 0 :(得分:0)
您需要将对象图像转换为RGBA图像,其中alpha通道是您创建的蒙版图像。完成此操作后,您可以将其粘贴到背景图片中。
def convert_to_png(img, a):
#alpha and img must have the same dimenstons
fin_img = cv2.cvtColor(img, cv2.COLOR_RGB2RGBA)
b, g, r, alpha = cv2.split(fin_img)
alpha = a
# plt.imshow(alpha);plt.title('alpha image');plt.show()
# plt.imshow(img);plt.title('original image');plt.show()
# plt.imshow(alpha);plt.title('fin alpha image');plt.show()
fin_img[:,:, 0] = img[:,:,0]
fin_img[:,:, 1] = img[:,:,1]
fin_img[:,:, 2] = img[:,:,2]
fin_img[:,:, 3] = alpha[:,:]
# plt.imshow(fin_img);plt.title('fin image');plt.show()
return fin_img
此功能会将两张图像合并为RGBA图像。
y1, y2 = new_loc[1], new_loc[1] + img.shape[0]
x1, x2 = new_loc[0], new_loc[0] + img.shape[1]
alpha_s = img[:, :, 3] / 255.0
alpha_l = 1.0 - alpha_s
for c in range(0, 3):
fin_img[y1:y2, x1:x2, c] = (alpha_s * img[:, :, c] +
alpha_l * img[y1:y2, x1:x2, c])
这会将对象图像复制到背景图像
答案 1 :(得分:0)
已解决
def get_only_object(img, mask, back_img):
fg = cv2.bitwise_or(img, img, mask=mask)
#imshow(fg)
# invert mask
mask_inv = cv2.bitwise_not(mask)
#fg_back = cv2.bitwise_or(back_img, back_img, mask=mask)
fg_back_inv = cv2.bitwise_or(back_img, back_img, mask=mask_inv)
#imshow(fg_back_inv)
final = cv2.bitwise_or(fg, fg_back_inv)
#imshow(final)
return final