私の質問は複雑です:
しきい値処理された画像があります。ピクセルを通過するよりも:
for (i=0; i<image.rows; ++i)
{
pixel = image.ptr<uchar>(i);
for (j=0; j<image.cols; ++j)
{
int p = pixel[j];
そして、次のシーケンスなど、列に並びます。
0 0 0 0 0 0 0 0 0 0 255 255 255 255 255 255 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 255 255 255;
現在の値if (p == pixel[j++])
と同じ各値の数量をカウントする必要があり、次の外観を取得します。
13 6 10 4 3 4
どこ:
13 = ピクセル値変更前の数量 0
6 = ピクセル値変更前の 255 値の数量
10 = ピクセル値変更前の次の 0 の量
4 = ピクセル値変更前の 255 値の数量
3 = ピクセル値変更前の次の 0 の量
4 = ピクセル値変更前の 255 値の数量
等....
私は次のアルゴリズムを使用することを考えています: チェックは、現在の値と同じラインの次のピクセル値です。「はい」の場合 - この値を次の値と合計し、「いいえ」の場合 = ゼロにリセットして、次の値が変更される前に再度合計します。
次のようなことをしようとしました:int x = x + pixel[j++];
が、結果に問題があります - 助けが必要です!
テンプレートシーケンスをインラインで見つける必要があるよりも:
の13 6 10 4 3 4
次の現在の値をマイナスしたい: 13-6, 6-10, 10-4, 4-3, 3-4 正または負の値で結果を取得します。たとえば、「TRUE」の場合は「1」を割り当て、「FALSE」の場合は「2」を割り当て、次のように数値を取得します
1 2 1 1 2
(私のサンプルの結果行)
これは、私が思うに、どの画像次元でも一定のシーケンスです。
ここで、シーケンス テンプレートの 1 つがこの行にあるかどうかを確認する必要があります。
たとえば、いくつかのユニークなテンプレートがあります。
1 2 2, 2 2 1, 1 1 1, 2 1 1
そして、結果行でどのテンプレートを満たすかを見つける必要があります...それは2 1 1
テンプレートです。一致する場合-作成されたテンプレートの変数をリストに書き込みます(写真の上から下までの行で一致するいくつかのテンプレートのテーブルを取得する必要があります)。一致しない場合=次の行に移動します。
あなたのアドバイスを求めますか?質問を最後まで読んでくれてありがとう。