cs50 pset4 обнаружение края фильтра - PullRequest
1 голос
/ 04 августа 2020

Я сделал новую публикацию для основных изменений в моем сообщении, но проблема в том, что мое изображение возвращается как то же введенное изображение. Я считаю, что это проблема с переменной newimage и заменой ее старой переменной изображения, но я не знаю почему.

void edges(int height, int width, RGBTRIPLE image[height][width])
{
    int gx[3][3] = {{-1, 0, 1}, {-2, 0, 2}, {-1, 0, 1}};
    int gy[3][3] = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}};
    RGBTRIPLE newimage[height][width];

    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            int redx = 0;
            int greenx = 0;
            int bluex = 0;
            int redy = 0;
            int greeny = 0;
            int bluey = 0;
            for (int k = i - 1; k <= i + 1 && k < height; k++)
            {
                for (int m = j - 1; m <= j + 1 && m < width; m++)
                {
                    if (k != -1 && m != -1)
                    {
                        redx   += image[k][m].rgbtRed   * gx[k-(i-1)][m-(j-1)];
                        greenx += image[k][m].rgbtGreen * gx[k-(i-1)][m-(j-1)];
                        bluex  += image[k][m].rgbtBlue  * gx[k-(i-1)][m-(j-1)];
                        redy   += image[k][m].rgbtRed   * gy[k-(i-1)][m-(j-1)];
                        greeny += image[k][m].rgbtGreen * gy[k-(i-1)][m-(j-1)];
                        bluey  += image[k][m].rgbtBlue  * gy[k-(i-1)][m-(j-1)];
                    }
                }
            }
            int finalred = round(sqrt((redx * redx) + (redy * redy)));
            int finalgreen = round(sqrt((greenx * greenx) + (greeny * greeny)));
            int finalblue = round(sqrt((bluex * bluex) + (bluey * bluey)));
            if (finalred > 255)
            {
                finalred = 255;
            }
            if (finalgreen > 255)
            {
                finalgreen = 255;
            }
            if (finalblue > 255)
            {
                finalblue = 255;
            }
            newimage[i][j].rgbtRed = finalred;
            newimage[i][j].rgbtGreen = finalgreen;
            newimage[i][j].rgbtBlue = finalblue;
        }
    }
    image = newimage;
    return;
}
...