如何获取灰度图像中灰度值小于阈值T的像素灰度值?代码求助
解决灰度图像像素阈值筛选问题
首先你现有代码存在几个关键问题:
totalgrayvalue初始设为0后从未更新,永远和像素灰度值不匹配,导致条件永远不成立- 把
T的循环嵌套在像素遍历里,每个像素会被重复处理255次,完全冗余 - 条件语句
and in range (0,T)语法错误,缺少要判断的变量 - 用字典
J[T]存储结果会覆盖值,每个T只能保留最后一个符合条件的灰度值,而非所有符合的像素
正确实现方式
针对单个阈值T筛选
如果你只需要筛选出灰度值小于某一特定T的像素:
# 假设已获取灰度图im_grey,width、height为图像宽高 T = 128 # 自定义阈值,范围0-255 filtered_pixels = [] for i in range(width): for j in range(height): gray_val = im_grey.getpixel((i, j))[0] if gray_val < T: filtered_pixels.append(gray_val) # filtered_pixels列表中存储所有小于T的灰度值
批量处理0-255所有阈值
如果要记录每个阈值T对应的所有符合条件的灰度值:
# 初始化字典,每个T对应一个空列表 J = {t: [] for t in range(256)} for i in range(width): for j in range(height): gray_val = im_grey.getpixel((i, j))[0] # 所有大于当前灰度值的T,该值都符合小于T的条件 for t in range(gray_val + 1, 256): J[t].append(gray_val)
更高效的优化方案(推荐)
getpixel遍历像素速度极慢,尤其处理大图时,建议用PIL的load()方法或转成numpy数组处理:
import numpy as np from PIL import Image # 将灰度图转为numpy数组 img_array = np.array(im_grey) # 单个阈值筛选示例 T = 128 filtered = img_array[img_array < T].flatten().tolist() # 批量统计各阈值下符合条件的像素数量(如需具体值可按需提取) counts = np.bincount(img_array.flatten(), minlength=256) cumulative_counts = np.cumsum(counts) # cumulative_counts[T]即为灰度值小于T的像素总数
内容的提问来源于stack exchange,提问作者Lê Quang Huy
相关产品推荐
相关产品推荐

