Function 为什么我的CS50过滤器边缘代码不能与check50一起使用?

Function 为什么我的CS50过滤器边缘代码不能与check50一起使用?,function,filter,cs50,Function,Filter,Cs50,我的cs50 filter Edge函数不起作用,它编译正常,但当我运行check50时,第一个测试(边正确过滤中间像素)我们正确,而其他测试仅通过最后一个值不正确,如下所示: :(边正确过滤边上的像素 应为“213 228 255\n”,而不是“213 228 140\n” 但是,当我单独打印红、绿、蓝的gx和gy,以及平方根的值时,颜色的值都不匹配 现在,这是我的边代码 void edges(int height, int width, RGBTRIPLE image[height][wid

我的cs50 filter Edge函数不起作用,它编译正常,但当我运行check50时,第一个测试(边正确过滤中间像素)我们正确,而其他测试仅通过最后一个值不正确,如下所示:

:(边正确过滤边上的像素 应为“213 228 255\n”,而不是“213 228 140\n”

但是,当我单独打印红、绿、蓝的gx和gy,以及平方根的值时,颜色的值都不匹配

现在,这是我的边代码

void edges(int height, int width, RGBTRIPLE image[height][width])
{
    int sr = 0;
    int sb = 0;
    int sg = 0;
    int yr = 0;
    int yb = 0;
    int yg = 0;
    struct RGBTRIPle
    {
        int rgbtRed;
        int rgbtGreen;
        int rgbtBlue;
    };
    struct RGBTRIPle copia[height][width];
    struct RGBTRIPLe
    {
        int rgbtRed;
        int rgbtGreen;
        int rgbtBlue;
    };
    struct RGBTRIPLe copia2[height][width];
    //Implementing Gx
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            sr = 0;
            sb = 0;
            sg = 0;
            for (int m = i - 1; m <= i + 1; m++)
            {
                for (int c = j - 1; c <= j + 1; c++)
                {

                    if (m >= 0 && m < height && c >= 0 && c < width)
                    {

                        if (c == j - 1)
                        {
                            if (m == i - 1 || m == i + 1)
                            {
                                sr += -1 * image[m][c].rgbtRed;
                                sb += -1 * image[m][c].rgbtBlue;
                                sg += -1 * image[m][c].rgbtGreen;
                            }
                            else
                            {
                                sr += -2 * image[m][c].rgbtRed;
                                sb += -2 * image[m][c].rgbtBlue;
                                sg += -2 * image[m][c].rgbtGreen;
                            }

                        }
                        if (c == j + 1)
                        {
                            if (m == i - 1 || m == i + 1)
                            {
                                sr += image[m][c].rgbtRed;
                                sb += image[m][c].rgbtBlue;
                                sg += image[m][c].rgbtGreen;
                            }
                            else
                            {
                                sr += 2 * image[m][c].rgbtRed;
                                sb += 2 * image[m][c].rgbtBlue;
                                sg += 2 * image[m][c].rgbtGreen;
                            }

                        }
                        else //c = j
                        {
                            sr += 0 * image[m][c].rgbtRed;
                            sb += 0 * image[m][c].rgbtBlue;
                            sg += 0 * image[m][c].rgbtGreen;
                        }

                    }
                }
            }
            copia[i][j].rgbtRed = sr;
            copia[i][j].rgbtGreen = sg;
            copia[i][j].rgbtBlue = sb;
        }

    }
    //Implementing Gy
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            yr = 0;
            yb = 0;
            yg = 0;
            for (int m = i - 1; m <= i + 1; m++)
            {
                for (int c = j - 1; c <= j + 1; c++)
                {

                    if (m >= 0 && m < height && c >= 0 && c < width)
                    {

                        if (m == i - 1)
                        {
                            if (c == j - 1 || c == j + 1)
                            {
                                yr += -1 * image[m][c].rgbtRed;
                                yb += -1 * image[m][c].rgbtBlue;
                                yg += -1 * image[m][c].rgbtGreen;
                            }
                            else
                            {
                                yr += -2 * image[m][c].rgbtRed;
                                yb += -2 * image[m][c].rgbtBlue;
                                yg += -2 * image[m][c].rgbtGreen;
                            }

                        }
                        if (m == i + 1)
                        {
                            if (c == j + 1 || c == j - 1)
                            {
                                yr += image[m][c].rgbtRed;
                                yb += image[m][c].rgbtBlue;
                                yg += image[m][c].rgbtGreen;
                            }
                            else
                            {
                                yr += 2 * image[m][c].rgbtRed;
                                yb += 2 * image[m][c].rgbtBlue;
                                yg += 2 * image[m][c].rgbtGreen;
                            }

                        }
                        else //c = j
                        {
                            yr += 0 * image[m][c].rgbtRed;
                            yb += 0 * image[m][c].rgbtBlue;
                            yg += 0 * image[m][c].rgbtGreen;
                        }
                    }
                }
            }
            copia2[i][j].rgbtRed = yr;
            copia2[i][j].rgbtGreen = yg;
            copia2[i][j].rgbtBlue = yb;
        }
    }
    //Implementing math operation to calculate resulting color
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            int r = 0;
            int g = 0;
            int b = 0;
            image[i][j].rgbtRed = (int) round(sqrt((copia[i][j].rgbtRed * copia[i][j].rgbtRed) + (copia2[i][j].rgbtRed *
                                                   copia2[i][j].rgbtRed)));
            image[i][j].rgbtGreen = (int) round(sqrt((copia[i][j].rgbtGreen * copia[i][j].rgbtGreen) + (copia2[i][j].rgbtGreen *
                                                copia2[i][j].rgbtGreen)));
            image[i][j].rgbtBlue = (int) round(sqrt((copia[i][j].rgbtBlue * copia[i][j].rgbtBlue) + (copia2[i][j].rgbtBlue *
                                                    copia2[i][j].rgbtBlue)));
            r = image[i][j].rgbtRed;
            g = image[i][j].rgbtGreen;
            b = image[i][j].rgbtBlue;

            if (image[i][j].rgbtRed > 255)
            {
                image[i][j].rgbtRed = 255;
            }
            if (image[i][j].rgbtGreen > 255)
            {
                image[i][j].rgbtGreen = 255;
            }
            if (image[i][j].rgbtBlue > 255)
            {
                image[i][j].rgbtBlue = 255;
            }
        }
    }
    return;
}
void边(整数高度、整数宽度、RGB三重图像[高度][宽度])
{
int sr=0;
int-sb=0;
int sg=0;
int-yr=0;
int-yb=0;
int-yg=0;
结构RGBTRIPle
{
int rgbtRed;
绿色;
int rgbtBlue;
};
结构RGBTRIPle copia[高度][宽度];
结构RGBTRIPLe
{
int rgbtRed;
绿色;
int rgbtBlue;
};
结构RGBTRIPLe copia2[高度][宽度];
//实现Gx
对于(int i=0;i if (image[i][j].rgbtRed > 255)
 {
     image[i][j].rgbtRed = 255;
 }
 if (image[i][j].rgbtGreen > 255)
 {
     image[i][j].rgbtGreen = 255;
 }
 if (image[i][j].rgbtBlue > 255)
 {
     image[i][j].rgbtBlue = 255;
 }
int cap(int rgb)
{
    if (rgb > 255)
    {
        return 255;
    }
    else
    {
        return rgb;
    }
}
image[i][j].rgbtRed =  cap(round(sqrt((copia[i][j].rgbtRed * copia[i][j].rgbtRed) + (copia2[i][j].rgbtRed * copia2[i][j].rgbtRed))));
image[i][j].rgbtGreen = cap(round(sqrt((copia[i][j].rgbtGreen * copia[i][j].rgbtGreen) + (copia2[i][j].rgbtGreen * copia2[i][j].rgbtGreen))));
image[i][j].rgbtBlue = cap(round(sqrt((copia[i][j].rgbtBlue * copia[i][j].rgbtBlue) + (copia2[i][j].rgbtBlue * copia2[i][j].rgbtBlue))));