OpenCV中基于binary mask调整指定区域像素为原色彩混合值的问题
问题解决方案
错误原因
你遇到的TypeError核心是两个问题:
- Python原生元组
(0,0,255,255)不支持直接和浮点数做乘法运算:元组和数字相乘默认执行序列复制逻辑,仅支持整数乘数 - 不需要对全图
img做乘法运算,仅需计算mask覆盖的目标区域即可,也能避免多余性能损耗
实现代码(适配numpy格式的图像数组,兼容OpenCV、PIL等常见库读取的图像)
import numpy as np # 目标色转为和图像同类型的numpy数组,对齐通道数 # 三通道图像可改为 [0,0,255],注意匹配你的图像通道顺序(BGR/RGB) target_color = np.array([0,0,255,255], dtype=img.dtype) # 提取mask区域做加权混合,*先转浮点计算避免uint8溢出*,计算完成后转回原数据类型 img[mask>0] = (img[mask>0].astype(np.float32) * 0.8 + target_color * 0.2).astype(img.dtype)
补充说明
如果你的图像数据本身就是浮点类型(取值范围0-1),可跳过类型转换步骤,直接调整target_color的取值范围到0-1再计算即可。
内容的提问来源于stack exchange,提问作者Chealsie
相关产品推荐
相关产品推荐

