python - 根据其他图像将图像的特定通道设置为某个值
问题描述
我有这张有 4 个通道的图像。我想要做的是,减少这张图片的不透明度。我希望图像保持透明,但是,我只想降低大众徽标部分的不透明度。(使用 opencv/numpy 和 python)
这是我尝试过的:
logo = cv2.imread(FILE_PATH, cv2.IMREAD_UNCHANGED)
logo[:, :, 3] = 50
但这会将值 50 分配给整个图像,给我这个结果。请注意图像的其余部分不再透明(我希望它保持与原始图像相同。)
我想到了类似的东西:
#This is my logic NOT ANY CODE, I want to do something like this:
if (any of) other 3 channels are non zero, make alpha channel of that pixel = 50.
else, keep that pixel as it is. (This pixel would be part of logo)
有没有办法通过在 python 中使用 opencv / numpy 来实现这个结果?我的最后一个选择是遍历所有像素并寻找上述条件,但我觉得这样效率低下。
这个答案正是我不想要的。我只想将徽标部分(彩色像素)的 alpha 通道设置为 50。
解决方案
只是充实@yann-ziselman的评论......
这是并排的图像的 RGBA 通道,带有红色边框,因此您可以在 Stack Overflow 的背景上看到范围:
以下是如何按照您的要求进行操作:
import cv2
# Load image including alpha channel
im = cv2.imread('logo.png', cv2.IMREAD_UNCHANGED)
# Set alpha channel to 50 anywhere none of the BGR channels is non-zero
im[(im[..., :3]!=0).any(2), 3] = 50
# Save result
cv2.imwrite('result.png', im)
结果
结果并排拆分为 RGBA 通道
推荐阅读
- python - Cmd 打开一个在我的桌面上但在我的语言桌面上的文档称为\Pracovná plocha)
- java - Java:在 JAva 9+ 中已弃用 JAXB。使用带有 DOCX4J 的 JAXB 将 XML 数据与 MS Word 模板绑定。任何人都知道 Java 9+ 中的替代方案
- java - 使用 Feign 客户端添加授权令牌
- swift - SwiftUI - 如何使用文本字段和 .onchange 更新结构中的项目
- node.js - Discord bot 不会回复带有“KlH04s69”这样的内容的命令
- javascript - Jquery 找不到输入文本框的值
- android - Android Exoplayer 在当前位置文本中显示毫秒
- r - 按指定顺序对 R 数据帧进行排序
- javascript - Google 表格 for/of 循环缺失;在 for 循环初始化程序之后
- c - if语句中的递归函数