矢量订阅错误

时间:2014-02-26 17:05:55

标签: c++ image filtering subscription

我正在用C ++编写一些图像过滤代码,但在创建代码时,我收到的错误就像“矢量订阅超出范围”。我追踪当地人,无法确定问题所在。我唯一知道的是我的过滤操作有问题。这是我的代码:

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矩阵是程序的输入矩阵。

2 个答案:

答案 0 :(得分:1)

看起来您应首先检查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]而不是[0]`

答案 1 :(得分:1)

您正在为您的垫子编制索引,这是不合法的。您必须在[0, size)范围内。

试试这个:y+n < mat[0].size() && x+m < mat.size()