使用 cimg 的高斯均值滤波器的 C++ 段错误

C++ seg fault on gaussian mean filter using cimg

我刚刚尝试使用 cimg 实现此过滤器,但一直出现段错误。我不确定为什么会发生这种情况,因为我一直在使用的其他过滤器没有这个问题。有什么明显的我在这里遗漏的吗?

  CImg<float> gaussianBlur(CImg<float> source)
    {
        double frame[25];
        double mean = 0;
        int width = source.width;
        int height = source.height;
        CImg<float> destination;
        destination = source;

    for (int x = 1; x < int(width) - 3; x++)

{
    for (int y = 1; y < int(height) - 3; y++)
    {
        mean = 0.0;

        frame[0] = int(source(x - 2 ,y - 2)) * .003765;
        frame[1] = int(source(x - 1 ,y - 2)) * .015019;
        frame[2] = int(source(x - 0 ,y - 2)) * .023792;
        frame[3] = int(source(x + 1 ,y - 2)) * .015019;
        frame[4] = int(source(x + 2 ,y - 2)) * .003765;

        frame[5] = int(source(x - 2 ,y - 1)) * .015019;
        frame[6] = int(source(x - 1 ,y - 1)) * .059912;
        frame[7] = int(source(x - 0 ,y - 1)) * .094907;
        frame[8] = int(source(x + 1 ,y - 1)) * .059912;
        frame[9] = int(source(x + 2 ,y - 1)) * .015019;

        frame[10] = int(source(x - 2 ,y - 0)) * .023792;
        frame[11] = int(source(x - 1 ,y - 0)) * .094907;
        frame[12] = int(source(x - 0 ,y - 0)) * .150342;
        frame[13] = int(source(x + 1 ,y - 0)) * .094907;
        frame[14] = int(source(x + 2 ,y - 0)) * .023792;

        frame[15] = int(source(x - 2 ,y + 1)) * .015019;
        frame[16] = int(source(x - 1 ,y + 1)) * .059912;
        frame[17] = int(source(x - 0 ,y + 1)) * .094907;
        frame[18] = int(source(x + 1 ,y + 1)) * .059912;
        frame[19] = int(source(x + 2 ,y + 1)) * .015019;

        frame[20] = int(source(x - 2 ,y + 2)) * .003765;
        frame[21] = int(source(x - 1 ,y + 2)) * .015019;
        frame[22] = int(source(x - 0 ,y + 2)) * .023792;
        frame[23] = int(source(x + 1 ,y + 2)) * .015019;
        frame[24] = int(source(x + 2 ,y + 2)) * .003765;

        for (int z = 0; z < 25; z++)
        {
            mean += frame[z];
        }

        destination(x,y) = float(mean / 25);
    }
   }

    return destination;
}
for (int y = 1; y < int(height) - 3; y++)
{
    mean = 0.0;

    frame[0] = int(source(x - 2 ,y - 2)) * .003765;

y == 1 你有 y - 2 == -1,所以你有对源图像的越界访问。