私は多くの文字のパターンイメージの辞書を持っており、認識する必要があるビットマップもあります。 「両方の」画像の高さは同じです!一部のパターン画像は幅が異なります。別のイメージ内のイメージを検出してその値を返す
パターンから文字を認識してX軸を反復する方法はありますか?
今私はXビットマップ欄は、その中に黒画素を有するかどうかをチェックするために、この機能を使用しています:
static Boolean GetColumnState(Bitmap bmp, int x)
{
BitmapData pixelData = bmp.LockBits(
new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadOnly,
PixelFormat.Format32bppArgb);
Boolean state = false;
unsafe
{
int* pData = (int*)pixelData.Scan0.ToPointer();
pData += x;
for (int i = 0; i < bmp.Height; ++i)
{
pData += bmp.Width;
if (Color.FromArgb(*pData) == Color.FromArgb(255, 0, 0, 0))
{
state = true;
break;
//pixelColumn[i] = Color.FromArgb(*pData);
}
}
}
bmp.UnlockBits(pixelData);
return state;
}
CulumnState()がtrueを返す場合、私はパターンと同じサイズの画像をトリミング画像を比較して比較します。
int y = target.Count;
for (int i = 0; i < b1.Width; i++)
{
if (GetColumnState(b1, i + count) == true)
{
int trWidth = target[5].Value.Width;
int trHeight = target[5].Value.Height;
Bitmap bitm = new Bitmap(trWidth, trHeight);
Rectangle section = new Rectangle(new Point(0, b1.Height - trHeight-1), new Size(trWidth, trHeight));
Bitmap cropped = CropImage(b1, section);
cropped.Save(@"C:\111.png");
target[5].Value.Save(@"C:\000.png");
if (CompareMemCmp(cropped, target[5].Value) == true)
{
//count = target[5].Value.Width;
textBox2.AppendText(target[5].Key);
break;
}
else { textBox2.AppendText("noo"); }
//textBox1.Text = "yes!";
}
else
{
//textBox1.Text = "noo";
}
break;
}
残念なことに、トリミング画像は、視覚的に同じに見えるにもかかわらず - memcmp(比較の私の方法は、これに基づいていますが)偽 ...にあり
ビットマップを返すように、異なるサイズを持っていますパターンイメージはすべてBlackAndWhiteカラーで表示されます。別のイメージ内の1つのイメージを比較し、その値を辞書(OCR)で返す信頼性の高い方法があるかどうか疑問に思っています。
タイトルに「C#」などのプレフィックスを付けないでください。それがタグのためのものです。 –
私はC#タグを使って検索を簡単にしています。私はいつもここに様々なプログラミング言語の専門家がいると思っていましたので、PHP、C++、またはJavaの人々を引き付けないためにC#私はそれを警告として受け取り、この誤りを将来も繰り返さないだろう – Alex