私は、txtファイルに2つのグレースケール画像を持っています.1つは、メイン画像のより小さいブロックです。私は2つの異なる2次元ベクトル行列に画像を読みました。C++画像処理ループ
行と画像の列は、次のとおり
メイン:M = 768、N = 1024
SubImg:R = 49、C = 36
int R = 49; int C = 36; //Sub Image Rows/Columns
int M = 768; int N = 1024; //Main Image Rows/Columns
Iのをループしたいですメイン画像を幅:49、高さ:36のブロックで並べ替えて各ブロックを配列に入れます。そのため、配列をSub画像と比較して(Nearest Neighbor Searchを使用して)、どのブロックがSub画像に最も近いかを調べることができます。
私が抱えている問題は、すべてのブロックを表示するループが得られないということです。ループを実行すると、特定の数のブロックしか表示されず、プログラムが衝突します。
// Testing Main 2D Vector in block format
for (int bx = 0; bx < M; bx += R)
for (int by = 0; by < N; by += C)
{
for (int x = 0; x < R; ++x)
{
for (int y = 0; y < C; ++y)
{
cout << MainIMG_2DVector[bx + x][by + y] << " ";
}
}
cout << "\n\n" << endl;
}
誰かが間違ったことを教えてもらえますか?
おかげ
EDIT ++++++++++++++++++++++++++++++++++++++++ +
M = 768、R = 49で割り切れない
_DEBUG_ERROR("vector subscript out of range");
_SCL_SECURE_OUT_OF_RANGE;
をデバッグした後、最後のループはBX = 735(* 49 15)で始まりべきBX = 735 + 48 = 783>に終了768 ... N = 1024、C = 36、= 1008(28 * 36)、by = 1008 + 35 = 1043> 1024に同じ問題があります。 - J. Piquard
幅を大きくすると、高さ、私の主なイメージストレッチ。これを回避する方法はありますか?
、このような問題を解決するための適切なツールは、あなたのデバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
@πάνταῥεῖこれは私が_DEBUG_ERROR( "ベクトル添え字が範囲外"になる)エラーです。 \t \t \t _SCL_SECURE_OUT_OF_RANGE; – QWERTY
M = 768はR = 49で割り切れないので、最後のループはbx = 735(15 * 49)で始まり、bx = 735 + 48 = 783> 768に終わるはずです... N = 1024とC = 36 by = 1008(28 * 36)〜by = 1008 + 35 = 1043> 1024。 –