我正在用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
矩阵是程序的输入矩阵。
答案 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()