如何根据像素初始亮度修改图像中对应像素的颜色
基于PIL实现彩色图像指定亮度范围像素置黑实现方案
不需要提前将彩色图像转换为灰度图,可直接读取每个像素的RGB值计算亮度,匹配目标范围后直接修改原像素值即可,以下提供两种常用实现方式:
方式1:逐像素遍历实现(逻辑直观,适合小尺寸图像)
核心思路是遍历图像所有像素点,逐个计算亮度后做条件判断修改:
from PIL import Image # 读取图像,统一转RGB模式兼容带透明通道的png图像 img = Image.open("你的输入图像路径.jpg").convert("RGB") width, height = img.size # 亮度阈值,可根据需求修改 LUMINANCE_THRESHOLD = 50 for x in range(width): for y in range(height): r, g, b = img.getpixel((x, y)) # 按RGB平均值计算亮度,若需要人眼感知更准确的加权亮度,可替换为 0.299*r + 0.587*g + 0.114*b luminance = (r + g + b) / 3 if luminance < LUMINANCE_THRESHOLD: # 符合条件的像素置为黑色 img.putpixel((x, y), (0, 0, 0)) # 保存处理后的图像 img.save("你的输出图像路径.jpg")
如果需要修改其他亮度范围(比如亮度在50~100之间的像素置黑),仅需修改判断条件为if 50 < luminance < 100即可。
方式2:Numpy向量化实现(高效快速,适合大尺寸图像)
当处理分辨率较高的图像时,逐像素遍历速度较慢,使用numpy矩阵运算可大幅提升处理效率:
from PIL import Image import numpy as np img = Image.open("你的输入图像路径.jpg").convert("RGB") img_arr = np.array(img) LUMINANCE_THRESHOLD = 50 # 计算所有像素的亮度矩阵,同样可替换为加权亮度计算公式 luminance_arr = np.mean(img_arr, axis=2) # 生成符合置黑条件的像素掩码 mask = luminance_arr < LUMINANCE_THRESHOLD # 掩码覆盖的像素所有通道置为0 img_arr[mask] = [0, 0, 0] # 转换回PIL图像并保存 processed_img = Image.fromarray(img_arr) processed_img.save("你的输出图像路径.jpg")
内容的提问来源于stack exchange,提问作者Al5000
相关产品推荐
相关产品推荐

