已知alpha通道对原图进行抠图和新背景的合成,基于python

本文介绍了一种利用已知alpha通道进行图像抠图的方法,并详细记录了使用Python和OpenCV实现这一过程的具体代码。首先,通过将原图与alpha通道结合生成透明前景图像;然后,将前景图像与新背景合成,实现图像的无缝融合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人自己设计过不少已知alpha通道进行原图抠图的方法,但是都不如人意,今天偶遇一篇文章描述这种问题的解决方法,以此记录下来,非常感谢该作者,文章链接为:https://blog.youkuaiyun.com/qianbin3200896/article/details/87934119

我记录该代码本意是给自己的学习做个笔记,侵删

import cv2
import numpy as np

img = cv2.imread("1.jpg")
mask = cv2.imread("2.jpg", 0)  # 读取灰度图像

height, width, channel = img.shape

b, g, r = cv2.split(img)

# -----------------1.获取透明的前景图像-----------
dstt = np.zeros((4, height, width), dtype=img.dtype)

dstt[0][0:height, 0:width] = b
dstt[1][0:height, 0:width] = g
dstt[2][0:height, 0:width] = r
dstt[3][0:height, 0:width] = mask
cv2.imwrite("fore.png", cv2.merge(dstt))

# -----------------2.与新背景图像合成-----------
bg = np.zeros((3, height, width), dtype=img.dtype)  # 生成背景图像
bg[2][0:height, 0:width] = 255  # 背景图像采用红色

dstt = np.zeros((3, height, width), dtype=img.dtype)

for i in range(3):
    dstt[i][:, :] = bg[i][:, :] * (255.0 - mask) / 255
    dstt[i][:, :] += np.array(img[:, :, i] * (mask / 255), dtype=np.uint8)
cv2.imwrite("merge.png", cv2.merge(dstt))

1.jpg
2.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值