CS50 Pset4模糊函数异常:输出图像近乎全红求排查
问题排查与修复
你的blur函数出现全红问题,核心是蓝绿通道的平均值计算逻辑错误,属于局部疏漏,具体问题和修复如下:
错误点定位
在计算三个通道的平均值时,你错误地将蓝、绿通道的平均值都复用了红色通道的计算结果:
avgRed = round(avgRed / counter); avgBlue = round(avgRed / counter); // 这里错用了avgRed,应该用avgBlue的总和 avgGreen = round(avgRed / counter); // 同样错用了avgRed,应该用avgGreen的总和
这就导致蓝、绿通道的数值被错误地计算为红色平均值再除以counter,结果自然极低,图像呈现全红状态。
修复后的代码片段
把蓝、绿通道的计算改成使用各自的总和:
avgRed = round(avgRed / counter); avgBlue = round(avgBlue / counter); // 修正为avgBlue的总和除以counter avgGreen = round(avgGreen / counter); // 修正为avgGreen的总和除以counter
其他注意事项
- 你当前的
imageCopy数组声明是正确的(栈上的二维数组),注释掉的malloc/free逻辑不需要启用,栈数组已经能满足需求,且避免了额外的内存管理问题。 - 边界判断的逻辑是正确的,已经处理了图像边缘像素的邻域范围,这部分无需修改。
内容的提问来源于stack exchange,提问作者Cesco
相关产品推荐
相关产品推荐

