gpt4 book ai didi

python - OpenCV - 拆分和合并阿尔法 channel 很慢

转载 作者:行者123 更新时间:2023-12-02 17:04:28 25 4
gpt4 key购买 nike

我正在使用 Python OpenCV 来分割 channel 并像这样删除黑色背景......

    b_channel, g_channel, r_channel = cv2.split(image_1)
alpha_channel = np.zeros_like(gray)

for p in range(alpha_channel.shape[0]):
for q in range(alpha_channel.shape[1]):
if b_channel[p][q]!=0 or g_channel[p][q]!=0 or r_channel[p][q]!=0:
alpha_channel[p][q] = 255

merged = cv2.merge((b_channel, g_channel, r_channel, alpha_channel))

这是可行的,但在仅 200kb 的图像上完成大约需要 10 秒

有没有更有效的方法来做到这一点,或者我可以使用我拥有的代码获得一些速度提升?

最佳答案

使用 for 迭代像素循环实际上非常缓慢且效率低下。此外,根据文档 here ,

cv2.split() is a costly operation (in terms of time). So do it only if you need it. Otherwise go for Numpy indexing.



您可以尝试使用 numpy 进行矢量化和索引,如下所示:
# create the image with alpha channel
img_rgba = cv2.cvtColor(img, cv2.COLOR_RGB2RGBA)

# mask: elements are True any of the pixel value is 0
mask = (img[:, :, 0:3] != [0,0,0]).any(2)
#assign the mask to the last channel of the image
img_rgba[:,:,3] = (mask*255).astype(np.uint8)

关于python - OpenCV - 拆分和合并阿尔法 channel 很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com