CS50 2021第4周模糊滤镜作业中间像素值计算错误求解
问题原因
你当前的代码缺失了颜色通道值计算时的四舍五入逻辑:C语言中整数除法默认是向零截断(直接舍弃小数部分),而CS50模糊滤镜的作业要求是将各通道的平均值四舍五入到最接近的整数,这就是你红色通道刚好差1的核心原因。
比如你当前场景下红色通道总和除以像素数的结果是126.888…,直接截断得到126,符合你的实际输出;而按要求四舍五入后应为127,匹配预期输出。
修复方案
修改通道值赋值的三行代码,使用(总和 + 计数/2) / 计数的整数运算技巧实现四舍五入即可:
temp[i][k].rgbtRed = (red + counted / 2) / counted; temp[i][k].rgbtGreen = (green + counted / 2) / counted; temp[i][k].rgbtBlue = (blue + counted / 2) / counted;
该改动修复后,3x3、4x4图像的模糊测试报错也会同步解决。
内容的提问来源于stack exchange,提问作者ThilotoSanchez
相关产品推荐
相关产品推荐

