如何使用Python将numpy数组中红色通道值大于100的像素改为纯黑
实现方法
你可以直接用numpy的布尔索引完成需求,只需要两行核心代码:
- 生成红色通道值大于100的像素掩码
mask = data[..., 0] > 100
- 将掩码对应位置的所有像素值设置为
(0,0,0)
data[mask] = [0, 0, 0]
完整可运行示例(基于PIL读取图片)
如果需要完整的从读入到保存的代码,可以参考如下:
import numpy as np from PIL import Image # 读入原图 img = Image.open("你的本地原图路径.jpg") data = np.array(img) # 核心处理逻辑 mask = data[..., 0] > 100 data[mask] = [0, 0, 0] # 生成处理后的图片并保存 res_img = Image.fromarray(data) res_img.save("处理后图片路径.png")
原理解释
data[..., 0] > 100会生成一个和图片宽高尺寸相同的布尔数组,对应位置为True代表该像素红色通道值大于100,需要修改- 利用numpy的广播特性,
data[mask] = [0,0,0]会自动将所有满足条件的像素的R、G、B三个通道值同时赋值为0,无需手动遍历像素,运行效率极高
注:如果你是用OpenCV读取的图片,默认通道顺序为BGR,红色通道对应下标为2,你只需要将data[...,0]替换为data[...,2]即可
内容的提问来源于stack exchange,提问作者user16755372
相关产品推荐
相关产品推荐

