numpy 使用灰度蒙版Python从图像中删除对象

at0kjp5o  于 2023-10-19  发布在  Python
关注(0)|答案(1)|浏览(115)

我的python脚本有一个小问题
我有一个这样的图像:

我创建了一个图像的灰度蒙版,突出显示黑色的人和白色的其他东西:

我的目标是将原始图像转换成png,并使用蒙版裁剪出人物,留下一个透明的“洞”来代替每个人物。

import cv2
import numpy as np

original_image = cv2.imread('ok/114_0175.jpg')
mask = cv2.imread('masks/114_0175.jpg', cv2.IMREAD_GRAYSCALE)

transparent_image = cv2.bitwise_and(original_image, original_image, mask=mask)

cv2.imwrite('paesaggio_con_persone_trasparenti.png', transparent_image)

问题是,这个代码的人只是被黑色的面具所取代,而不是透明的,我怎么能解决这个问题呢?
这是代码的结果:

fnvucqvd

fnvucqvd1#

构建一个4通道阵列,并将其改为imwrite()。将alpha值放在第四个通道中。
一定要把那些人身上的彩色通道擦掉。仅将alpha设置为0不会删除颜色数据,只是隐藏它。

(h, w) = original_image.shape

alpha_channel = np.full((h, w), 255, dtype=np.uint8)

...

with_alpha_channel = np.dstack([transparent_image, alpha_channel])

您还可以使用OpenCV构建4通道阵列:cv.cvtColor(..., cv.COLOR_BGR2BGRA)

相关问题