首先下载tessnet2_32.dll及相关语言包,将dll加入引用

  1. private tessnet2.Tesseract ocr = new tessnet2.Tesseract();//声明一个OCR类
  2. //程序开始的时候,初始化OCR
  3. ocr.SetVariable("tessedit_char_whitelist", "0123456789."); //设置识别变量,当前只能识别数字。
  4. ocr.Init(@"D:\tessdata", "eng", false); //应用当前语言包。注,Tessnet2是支持多国语的。语言包下载链接:http://code.google.com/p/tesseract-ocr/downloads/list
  5. //下边这个函数是将网络上的图片识别成字符串,传入图片的超链接,输出字符串
  6. public string Bmp2Str(string bmpurl)
  7. {
  8. //http://www.newwhy.com/2010/0910/13708.html
  9. string s = "0";
  10. WebClient wc = new WebClient();
  11. try
  12. {
  13. byte[] oimg = wc.DownloadData(bmpurl);//将要识别的图像下载下来
  14. MemoryStream ms = new MemoryStream(oimg);
  15. Bitmap image = new Bitmap(ms);
  16. //为了提高识别率,所以对图片进行简单的处理
  17. image = BlackAndWhite(image, 0.8);//黑白处理,这个函数看下边
  18. image = new Bitmap(image, image.Width * 3, image.Height * 3);//放大三倍
  19. Monitor.Enter(this);//因为是多线程,所以用到了Monitor。
  20. System.Collections.Generic.List<tessnet2.Word> result = ocr.DoOCR(image, Rectangle.Empty);//执行识别操作
  21. foreach (tessnet2.Word word in result) //遍历识别结果。
  22. s = s + word.Text;
  23. Monitor.Exit(this);
  24. if (s.Length > 2)
  25. s = s.Substring(2, s.Length - 2);
  26. }
  27. catch
  28. {
  29. s = "0";
  30. }
  31. finally
  32. {
  33. wc.Dispose();
  34. }
  35. return s;
  36. //Console.WriteLine("{0} : {1}", word.Confidence, word.Text);
  37. }
  38. //黑白处理的函数,网上查的。
  39. public static Bitmap BlackAndWhite(Bitmap bitmap, Double hsb)
  40. {
  41. if (bitmap == null)
  42. {
  43. return null;
  44. }
  45. int width = bitmap.Width;
  46. int height = bitmap.Height;
  47. try
  48. {
  49. Bitmap bmpReturn = new Bitmap(width, height, PixelFormat.Format1bppIndexed);
  50. BitmapData srcBits = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
  51. BitmapData targetBits = bmpReturn.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);
  52. unsafe
  53. {
  54. byte* pSrcBits = (byte*)srcBits.Scan0.ToPointer();
  55. for (int h = 0; h < height; h++)
  56. {
  57. byte[] scan = new byte[(width + 7) / 8];
  58. for (int w = 0; w < width; w++)
  59. {
  60. int r, g, b;
  61. r = pSrcBits[2];
  62. g = pSrcBits[1];
  63. b = pSrcBits[0];
  64. if (GetBrightness(r, g, b) >= hsb) scan[w / 8] |= (byte)(0x80 >> (w % 8));
  65. pSrcBits += 3;
  66. }
  67. Marshal.Copy(scan, 0, (IntPtr)((int)targetBits.Scan0 + targetBits.Stride * h), scan.Length);
  68. pSrcBits += srcBits.Stride - width * 3;
  69. }
  70. bmpReturn.UnlockBits(targetBits);
  71. bitmap.UnlockBits(srcBits);
  72. return bmpReturn;
  73. }
  74. }
  75. catch
  76. {
  77. return null;
  78. }
  79. }

找到了
private static float GetBrightness(int r, int g, int b)
{
float fR = ((float)r) / 255f;
float fG = ((float)g) / 255f;
float fB = ((float)b) / 255f;
float fMax = fR;
float fMin = fR;

fMax = (fG > fMax) ? fG : fMax;
fMax = (fB > fMax) ? fB : fMax;

fMin = (fG < fMax) ? fG : fMax;
fMin = (fB < fMax) ? fB : fMax;

return ((fMax + fMin) / 2f);

}

C#调用开源图像识别类库tessnet2的更多相关文章

  1. [转]非常实用的15款开源PHP类库

    源文件:http://www.csdn.net/article/2013-10-09/2817123-PHP-Libraries 英文原文:https://codegeekz.com/useful-p ...

  2. 15款开源PHP类库

    PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程.这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互.此外,开发者使用这些类库还可以简 ...

  3. 非常实用的15款开源PHP类库

    PHP库给开发者提供了一个标准接口,它帮助开发者在PHP里充分利用面向对象编程.这些库为特定类型的内置功能提供了一个标准的API,允许类可以与PHP引擎进行无缝的交互.此外,开发者使用这些类库还可以简 ...

  4. 不错的开源FTP类库

    socket开源ftp类库代码:http://netftp.codeplex.com/ 需要注意事项,如果以下代码出现乱码问题,可以设置其中的Encoding属性就可以. 用法示例: using Sy ...

  5. PHP 支付类库, cURL开源HTTP类库

    未做任何测试 支付类库地址:http://doc.yurunsoft.com/PaySDK cURL开源HTTP类库地址:http://doc.yurunsoft.com/YurunHttp/1

  6. 使用开源免费类库在.net中操作Excel

    自从上次找到NPOI之后,根据园友提供的线索以及Google,又找到了一些开源免费的类库,所以都简单体验了一遍. 主要找到以下类库: MyXls(http://sourceforge.net/proj ...

  7. C++调用C#dll类库中的方法(非显性COM)

    一般在网上搜C++如何调用C#的函数,出来的结果都是做成COM组件,但是这种方法dll安装麻烦,需要注册COM组件,需要管理员权限,调试麻烦,经常需要重启机器,反正有诸多不便. 然后在看<CLR ...

  8. DBUtils开源JDBC类库,对JDBC简单封装(作用是:简化编码工作量,同时不会影响程序的性能)

    DBUtils:提高了程序的性能,编程更加简便 架包 mysql-connector-java-jar commons-dbcp-1.4jar commons-pool-1.5.5jar common ...

  9. C++开源跨平台类库集

    在如下的库支持下,开发的系统可以很方便移植到当前大部分平台上运行而无需改动,只需在对应的平台下 用你喜欢的编译器 重新编译即可 经典的C++库   STLport-------SGI STL库的跨平台 ...

随机推荐

  1. because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled

    spring security 配置问题,静态资源未被允许访问

  2. springboot jpa sql查询与传值

    public interface ARepository extends PagingAndSortingRepository<A, APK>, JpaSpecificationExecu ...

  3. char和varchar查询速度、存储空间比较详解(转)

    转:http://tech.diannaodian.com/dw/data/sql/2011/1005/135572.html 一.数据行结构 1.char(n): 系统分配n个字节给此字段,不管字段 ...

  4. python--第三天总结

    [collection系列]1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 c = Counter('abcdeabc ...

  5. 八:python 对象类型详解四:字典

    一:字典通识: 1,字典通过键而不是偏移量来读取: 2,字典是任意对象的无序集合: 3,字典可变长.异构.任意嵌套: 4,字典属于可变映射类型: 5,对象引用表(散列表): 二:实际应用中的字典: 1 ...

  6. 前端、数据库、Django简单的练习

    一.前端 1.前端页面由哪几层构成,分别是什么,作用是什么? 分为:结构层(html),表示层(css),行为层(js). 结构层 超文本标记语言.由HTML或XHTML之类的标记语言负责创建.标签, ...

  7. nodejs中.npmrc文件的内容

    . nodejs安装后,使用npm安装模块的时候我出现了一个错误. getaddrinfo ENOTFOUND xxx 主要是这个配置文件的问题.搞不清楚.直接打开把文件内容删除变成 npmrc文件内 ...

  8. 颜色 color

    在res/values文件夹下的color.xml添加 <?xml version="1.0" encoding="utf-8"?> <res ...

  9. if (HttpContext.Current.User.Identity.IsAuthenticated) 权限验证总是true

    将浏览器关闭重启. 注:该语句是判断用户是否经过验证.

  10. Nginx搭建正向代理服务器

    配置如下: server { listen 8888;                                                   #监听端口 location / { res ...