本帖最后由 druidAAAA 于 2017-1-11 20:34 编辑
多谢万能的版主大大.
1) 你给我的这个例子, 我跑不起来(我现在还在试), 不知这个例子是否有官方的文档说明?
(另: 我在中文LeadTools网站上
http://leadtools.gcpowertools.com.cn/products/imaging/image-processing/
的 LEADTOOLS Image Processing SDK技术综述 里面
找到了这个 32位和64位图像处理二进制文件
但似乎他没有如 MSDN 一样指向具体的文档, 不知我应该如何查阅? )
2) 在上面这条路还没走通的时候, 我写了3个函数来做二值化. 出来的图形似乎可以接受, 但是仍然无法用 Advantage 引擎识别;
你觉得解决的思路会不会在识别引擎的使用上? (如果需要我也可以贴我写的OCR引擎调用代码, 但是这里贴出来就太长啦)
这里附上我转化后的图形.
(我会在下面贴上我的3个转化函数给您参考, 如果需要的话.)
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Bitmap Binarization(Bitmap bmp) // 此函数调用了3个我写的粗糙的图像转化功能, 见笑了.
{
bmp = ToGray((Bitmap)bmp);
bmp = GrayReverse((Bitmap)bmp);
bmp = ConvertTo1Bpp2((Bitmap)bmp);
return bmp;
}
------------------------------------------------------------------------------------------------------------------------------------------------------------
Bitmap ToGray(Bitmap bmp)
{
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
//利用公式计算灰度值
int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);
Color newColor = Color.FromArgb(gray, gray, gray);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Bitmap GrayReverse(Bitmap bmp)
{
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
Color newColor = Color.FromArgb(255 - color.R, 255 - color.G, 255 - color.B);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}
-----------------------------------------------------------------------------------------------------------------------------------------------------------
Bitmap ConvertTo1Bpp2(Bitmap img)
{
int w = img.Width;
int h = img.Height;
Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);
for (int y = 0; y < h; y++)
{
byte[] scan = new byte[(w + 7) / 8];
for (int x = 0; x < w; x++)
{
Color c = img.GetPixel(x, y);
if (c.GetBrightness() >= 0.5) scan[x / 8] |= (byte)(0x80 >> (x % 8));
}
Marshal.Copy(scan, 0, (IntPtr)((int)data.Scan0 + data.Stride * y), scan.Length);
}
return bmp;
}
|