获取图片X轴方向像素亮度值数组的Python脚本实现求助
获取图片中间水平线的亮度值数组(用于对比光扩散器效果)
直接修改你的代码就能实现需求,以下是两种常用的实现方式:
1. 获取整条水平线的所有像素亮度
适合需要精细数据的场景,返回中间行从左到右每一个像素的亮度值:
from PIL import Image def get_full_middle_line_brightness(image_path): # 打开图片并转换为RGB格式 imag = Image.open(image_path) imag = imag.convert('RGB') # 计算中间水平线的Y坐标(取整数行) middle_y = imag.height // 2 brightness_values = [] # 遍历X轴所有像素点 for x in range(imag.width): r, g, b = imag.getpixel((x, middle_y)) # 沿用你原有的RGB均值计算亮度 brightness = (r + g + b) / 3 brightness_values.append(brightness) return brightness_values # 调用示例 brightness_array = get_full_middle_line_brightness("你的图片路径.jpg") # 打印前10个值验证 print(brightness_array[:10])
2. 指定采样数量获取亮度值
如果图片宽度很大,不需要每个像素的数据,可以指定采样点数,均匀选取中间行的像素:
from PIL import Image def get_sampled_middle_line_brightness(image_path, sample_num=100): imag = Image.open(image_path) imag = imag.convert('RGB') middle_y = imag.height // 2 brightness_values = [] # 计算采样间隔 step = imag.width // sample_num # 按间隔遍历采样点 for x in range(0, imag.width, step): # 防止x超出图片宽度边界 x = min(x, imag.width - 1) r, g, b = imag.getpixel((x, middle_y)) brightness = (r + g + b) / 3 brightness_values.append(brightness) # 补充最后一个点,确保采样数量达标 if len(brightness_values) < sample_num: r, g, b = imag.getpixel((imag.width - 1, middle_y)) brightness_values.append((r + g + b) / 3) return brightness_values # 调用示例,采样50个点 sampled_brightness = get_sampled_middle_line_brightness("你的图片路径.jpg", sample_num=50) print(sampled_brightness)
生成亮度分布效果图
如果需要把亮度数据可视化成折线图,用matplotlib就能实现:
import matplotlib.pyplot as plt # 获取亮度数据 brightness_data = get_full_middle_line_brightness("你的图片路径.jpg") # 绘制折线图 plt.plot(brightness_data) plt.title("图片中间水平线亮度分布") plt.xlabel("X轴像素位置") plt.ylabel("亮度值(0-255)") plt.grid(True) plt.show()
关键逻辑说明
middle_y = imag.height // 2:取图片高度的中间整数行,保证坐标是有效的像素位置- 亮度计算沿用你原有的RGB均值方法,结果范围0(黑)到255(白)
- 采样模式通过
step控制间隔,避免宽图生成过多数据
内容的提问来源于stack exchange,提问作者Rune Vandebuerie
相关产品推荐
相关产品推荐

