C语言实现图像3x3邻域颜色平均的程序未通过测试如何排查
代码Bug排查提示
你代码中的问题主要出在以下几个位置:
- 边界判断逻辑错误
目前仅对lowi < 0、lowj < 0做了拦截,没有判断lowi >= height、lowj >= width的越界场景,只有角落像素不需要判断上溢场景,所以仅角落测试能通过。
另外你直接修改循环变量lowi、lowj的写法是错误的,这会打乱循环计数逻辑,正确写法是判断坐标合法后再累加像素值,不合法直接跳过本次循环即可。 - 平均计算代码位置错误
你把像素值赋值的代码放在了lowi的内层循环里,也就是说每遍历完一行邻域就会重写一次当前像素值,等整个3x3邻域遍历完时,你用的是中途错误的计算结果,而非所有邻域累加后的总平均值。正确写法是把赋值逻辑挪到两层邻域遍历循环的外面,等所有邻域值累加完成后再计算平均赋值。 - 直接修改原图像数据
你在遍历过程中直接覆盖了原image的像素值,后续计算其他像素的邻域平均值时,读取的是已经被模糊处理后的新值,而非原始图像的像素值,会导致最终计算结果偏差。你需要额外申请一个临时二维数组存储所有像素的计算结果,等所有像素的平均值都计算完成后,再统一写回原image数组。
内容的提问来源于stack exchange,提问作者Wojtek Z
相关产品推荐
相关产品推荐

