Python 基于图像掩码的OpenCV overlay 2图像
我需要覆盖2个基于第三个图像遮罩的图像 范例 -我有这个背景 2.-我有这个对象图像,还有反分割图像 对象图像 我正在尝试基于第三个图像(遮罩图像)合并背景图像和对象图像 (遮罩图像) 最终结果是背景图像+对象图像(仅基于遮罩) 任何想法。。 我试过了Python 基于图像掩码的OpenCV overlay 2图像,python,opencv,Python,Opencv,我需要覆盖2个基于第三个图像遮罩的图像 范例 -我有这个背景 2.-我有这个对象图像,还有反分割图像 对象图像 我正在尝试基于第三个图像(遮罩图像)合并背景图像和对象图像 (遮罩图像) 最终结果是背景图像+对象图像(仅基于遮罩) 任何想法。。 我试过了 但是没有按预期的那样工作。。有什么建议吗?谢谢 您需要将对象图像转换为RGBA图像,其中alpha通道是您创建的遮罩图像。完成此操作后,可以将其粘贴到背景图像 def convert_to_png(img, a): #alpha a
但是没有按预期的那样工作。。有什么建议吗?谢谢 您需要将对象图像转换为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])
这会将对象图像复制到背景图像中您需要将对象图像转换为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])
这将把目标图像复制到背景图像
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
解决
公平警告:这将适用于所有图像具有相同尺寸的情况。如果这是您的用例,那么这将是一个很好的解决方案!记住你可以自己接受你的答案:)公平警告:这适用于所有图像尺寸相同的情况。如果这是您的用例,那么这将是一个很好的解决方案!记住你可以自己接受你的答案:)