如何通过线剖面获取图像水平线上的像素亮度?代码求助
解决图像水平线像素亮度计算问题
先修正原代码的基础错误
原代码存在拼写错误(imag应为image),以及亮度计算的语法问题,先修正这些基础问题,再添加循环逻辑。
方法一:循环遍历水平线所有像素
指定目标水平线的y坐标,遍历该线上的所有x值(从0到图像宽度-1),逐个获取像素并计算亮度,最后求平均值:
from PIL import Image import os # 打开图像并转为RGB模式 image = Image.open(os.path.join("mypath", "a.jpg")) image = image.convert('RGB') # 指定目标水平线的y坐标 target_y = 137 image_width = image.width brightness_values = [] # 遍历该水平线上的所有x坐标 for x in range(image_width): # 获取当前像素的RGB值 r, g, b = image.getpixel((x, target_y)) # 计算亮度(这里用RGB平均值,也可以用加权公式:0.299*R + 0.587*G + 0.114*B) brightness = (r + g + b) / 3 brightness_values.append(brightness) # 计算该水平线的平均亮度 average_brightness = sum(brightness_values) / len(brightness_values) print("水平线亮度数组:", brightness_values) print("平均亮度:", average_brightness)
方法二:用numpy批量处理(更高效)
如果图像较大,用numpy批量处理速度更快,直接提取整行像素进行计算:
from PIL import Image import os import numpy as np # 打开图像并转为RGB模式,再转成numpy数组 image = Image.open(os.path.join("mypath", "a.jpg")) image_rgb = image.convert('RGB') image_array = np.array(image_rgb) # 指定目标水平线的y坐标 target_y = 137 # 提取该水平线上的所有像素 line_pixels = image_array[target_y, :] # 计算每个像素的亮度(RGB平均值) brightness_values = np.mean(line_pixels, axis=1) # 计算平均亮度 average_brightness = np.mean(brightness_values) print("水平线亮度数组:", brightness_values) print("平均亮度:", average_brightness)
注:亮度计算也可以使用更符合人眼感知的加权公式:
0.299*r + 0.587*g + 0.114*b,替换上述代码中的亮度计算部分即可。
内容的提问来源于stack exchange,提问作者Tom H
相关产品推荐
相关产品推荐

