Python实现图像模糊:不使用numpy如何让模糊核遍历像素计算均值
原生Python实现图像均值模糊入门提示
前置准备:明确核心数据结构
- 先确认灰度图二维列表的坐标对应规则:常规写法为
img[行索引][列索引],提前统计好图像的总高度(行数)、总宽度(列数),避免后续坐标遍历搞反 - 确认模糊核的基础参数:n维模糊核通常为奇数尺寸(如3×3、5×5),提前计算核的半长(如3×3核半长为1),后续邻域范围计算都基于该值推导
第一步:先确定边界处理规则
图像边缘像素的邻域会超出原图范围,新手可优先选择最简单的规则先跑通逻辑:
- 最简方案:仅处理邻域完全落在原图范围内的像素,最终输出图像尺寸比原图小(核边长-1)个像素,无需额外做越界判断
- 其他可选规则:超出范围的像素按0填充、或复制最近边缘像素值,可在基础逻辑跑通后再迭代实现
第二步:拆解两层遍历逻辑
- 外层遍历:遍历输出图像的每个目标像素坐标
(y, x),对应模糊后图像的位置 - 内层遍历:对每个目标坐标,遍历模糊核的所有元素位置
(ky, kx),计算该核位置对应的原图坐标:原图y = 目标y + (ky - 核半长)、原图x = 目标x + (kx - 核半长) - 加权累加:将所有合法原图坐标的像素值,乘以对应核位置的权重(均值模糊的核所有位置权重相等,总和为1),累加结果就是目标坐标的模糊后像素值
调试建议
- 先使用手动构造的小尺寸测试用例实验:比如自定义一个5×5的小灰度图,搭配3×3核测试,每一步打印累加值校验逻辑
- 注意像素值范围:灰度图像素通常为0~255的整数,计算完成后需做取整和范围截断,避免出现非法数值
内容的提问来源于stack exchange,提问作者Daniel E
相关产品推荐
相关产品推荐

