【发布时间】:2012-02-20 19:28:27
【问题描述】:
我有一个包含许多字母的图案图像字典,还有一个必须识别的位图! “两个”图像的高度相同!一些图案图像具有不同的宽度。
如何遍历 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;
}
如果GetColumnState() 返回 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(我的比较方法基于此)返回 false..
必须识别的位图和图案图像都是黑白颜色..我想知道是否有更可靠的方法来比较另一个图像中的一个图像并通过字典(OCR)返回其值..
【问题讨论】:
-
请不要在标题前加上“C#”之类的前缀。这就是标签的用途。
-
好吧,我也用C#标签来方便搜索。。我一直以为这里有不同编程语言的专业人士,所以我故意输入C#,以免吸引PHP,C++或 Java 人.. 但无论如何我会把它当作一个警告,以后不会重复这个错误