You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BMG图像模糊滤镜代码问题:本地正常但自动Grader不通过

问题分析:模糊滤镜自动评分不通过的原因

你的代码逻辑框架正确(先复制原图到临时数组再计算模糊),但边界像素的判断条件完全错误,导致计算平均值时读取了越界的内存数据,最终结果不符合评分标准。

错误点详解

当前的边界判断代码:

if(w >= 0 && w < width && q >= 0 && q < height)

这段代码错误地判断了偏移量q和w的范围,而非偏移后的目标像素坐标。正确逻辑应校验:i+q(行号)需满足0 <= 行号 < height,j+w(列号)需满足0 <= 列号 < width。

举个反例:处理最后一行像素(i = height - 1)时,若q = 1,偏移后的行号为height,已超出图像范围,但你的条件中q=1 < height成立,会错误访问TEMP[height][j+w],读取无效内存数据,导致该像素RGB平均值计算错误。

修正后的代码

将边界判断替换为正确的坐标校验即可:

// Blur image
void blur(int height, int width, RGBTRIPLE image[height][width])
{
    RGBTRIPLE TEMP[height][width];
    for(int i = 0; i < height; i++)
    {
        for(int j = 0; j < width; j++)
        {
            TEMP[i][j].rgbtRed = image[i][j].rgbtRed;
            TEMP[i][j].rgbtGreen = image[i][j].rgbtGreen;
            TEMP[i][j].rgbtBlue = image[i][j].rgbtBlue;
        }
    }

    for(int i = 0; i < height; i++)
    {
        for(int j = 0; j < width; j++)
        {
            float count = 0;
            float red = 0;
            float green = 0;
            float blue= 0;

            for(int q = -1; q < 2; q++)
            {
                for(int w = -1; w < 2; w++)
                {
                    // 修正:判断偏移后的坐标是否在图像有效范围内
                    if((i + q) >= 0 && (i + q) < height && (j + w) >= 0 && (j + w) < width)
                    {
                        red += TEMP[i+q][j+w].rgbtRed;
                        green += TEMP[i+q][j+w].rgbtGreen;
                        blue += TEMP[i+q][j+w].rgbtBlue;
                        count ++;
                    }
                }
            }
            image[i][j].rgbtRed = round(red/count);
            image[i][j].rgbtGreen = round(green/count);
            image[i][j].rgbtBlue = round(blue/count);
        }
    }
}

补充说明

替换后,所有边界像素的模糊计算都会只取图像内存在的相邻像素求平均,不会读取无效数据,计算结果会完全符合自动评分的预期。

内容的提问来源于stack exchange,提问作者Neuquert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:10:32