c++ - vector 订阅错误

标签 c++ image filtering subscription

我正在用 C++ 编写一些图像过滤代码,但在创建代码时出现“vector 订阅超出范围”之类的错误。我追踪了本地人,但无法弄清楚问题出在哪里。我唯一知道的是我的过滤操作有问题。这是我的代码:

int filtersize;

cout << "enter the filter size" ;
cin >> filtersize ;

int a = (filtersize-1)/2, i=a, j=a;

vector <vector<int>> filter (filtersize, vector <int>(filtersize, 0));
vector <vector<int>> filtered (countRow, vector <int>(countCol, 0));

int avg=0;
int average=0;

for(int x=0; x< mat.size(); x++)
{
    for(int y=0; y< mat[0].size(); y++)
    {
        for (int m=-a; m<=a; m++)
        {
            for(int n=-a; n<=a; n++)
            {
                if(y + n >= 0 &&
                   x + m >= 0 &&
                   y + n <= mat[0].size() &&
                   x + m <= mat.size())
                {
                    avg = avg + mat[x+m] [y+n];
                }
            }
        }

        average = avg / (filtersize * filtersize);
        filtered[x][y] = average;
        avg = 0;

        Print(filtered);
    }
}

mat 矩阵是程序的输入矩阵。

最佳答案

看起来你应该检查一下 x+m < mat.size()首先然后检查y+n < mat[x+m].size()

if (y+n>=0 && x+m>=0 && x+m < mat.size() &&  y+n < mat[x+m].size())

注意事项:检查<而不是 <=并检查 mat[x+m]而不是 mat[0]`

关于c++ - vector 订阅错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22048324/

相关文章:

c++ - 创建只能由 Windows 服务打开的文件

c++ - 从在 postgresql 上运行的 C++ 文件打印

ios - 在 ios 中将图像转换为卡通

list - 在 MATLAB 元胞数组中查找和过滤元素

c - C 语言中的 FIR 滤波器?

c++ - Visual Studio 2013 中的 LibCurl 静态链接器错误,即使在包含必要的依赖项之后也是如此

C++ strcpy(Struct.Property, "VALUE") 在 C# 中使用?

html - 我添加了一个图像,出于某种原因添加了一个滚动条。我也有一个文本元素的问题

android - 使用android NDK NativeWindow显示图像时,如何锁定方向?

c - Matlab 抽取( vector ,阶数, 'fir')内部工作原理