2014-02-26 125 views
1

我正在用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矩陣是程序的輸入矩陣。

回答

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

您索引您的墊子大小,這是不合法的。您必須在範圍[0, size)

試試這個:y+n < mat[0].size() && x+m < mat.size()