当前位置:   article > 正文

C# 图像基本处理和OCR_c# ocrresult result = ocr.read(input);

c# ocrresult result = ocr.read(input);




  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Imaging;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using System.Threading;
  11. using System.Diagnostics;
  12. using OpenQA.Selenium.Appium.Windows;
  13. using OpenQA.Selenium.Remote;
  14. using System.IO;
  15. using OpenQA.Selenium;
  16. using AForge;
  17. using AForge.Imaging;
  18. using AForge.Imaging.Textures;
  19. using AForge.Imaging.Filters;
  20. using AForge.Math;
  21. using asprise_ocr_api;
  22. using IronOcr;
  23. using System.Runtime.InteropServices;
  24. namespace WindowsFormsApp3
  25. {
  26. public partial class Form1 : Form
  27. {
  28. public Form1()
  29. {
  30. InitializeComponent();
  31. }
  32. private void button1_Click(object sender, EventArgs e)
  33. {
  34. //AspriseOCR.SetUp();
  35. //AspriseOCR ocr = new AspriseOCR();
  36. //ocr.StartEngine("eng", AspriseOCR.SPEED_FASTEST);
  37. Bitmap a = new Bitmap(@"d:\4.png");
  38. Bitmap b = ToGray(a);
  39. Bitmap c = GrayReverse(b);
  40. //Bitmap d = ConvertTo1Bpp1(c);
  41. Bitmap d = GetBinaryzationImage1(c);
  42. d.Save(@"d:\4.bmp");
  43. //string s = ocr.Recognize(@"d:\3.bmp", -1, -1, -1, -1, -1, AspriseOCR.RECOGNIZE_TYPE_ALL, AspriseOCR.OUTPUT_FORMAT_PLAINTEXT);
  44. //MessageBox.Show(s);
  45. //ocr.StopEngine();
  46. //var Ocr = new AutoOcr();
  47. //var result = Ocr.Read(@"d:\4.bmp");
  48. //MessageBox.Show(result.Text);
  49. var Ocr = new AdvancedOcr()
  50. {
  51. CleanBackgroundNoise = true,
  52. EnhanceContrast = true,
  53. EnhanceResolution = true,
  54. Language = IronOcr.Languages.English.OcrLanguagePack,
  55. Strategy = IronOcr.AdvancedOcr.OcrStrategy.Advanced,
  56. ColorSpace = AdvancedOcr.OcrColorSpace.Color,
  57. DetectWhiteTextOnDarkBackgrounds = true,
  58. InputImageType = AdvancedOcr.InputTypes.AutoDetect,
  59. RotateAndStraighten = true,
  60. ReadBarCodes = true,
  61. ColorDepth = 4
  62. };
  63. var testImage = @"d:\4.bmp";
  64. var Results = Ocr.Read(testImage);
  65. //var Barcodes = Results.Barcodes.Select(b => b.Value);
  66. MessageBox.Show(Results.Text);
  67. }
  68. private Bitmap GetBinaryzationImage1(Bitmap image)
  69. {
  70. Bitmap result = image.Clone() as Bitmap;
  71. // 计算灰度平均值
  72. List<int> tempList = new List<int>();
  73. for (int i = 0; i < result.Width; i++)
  74. {
  75. for (int j = 0; j < result.Height; j++)
  76. {
  77. tempList.Add(result.GetPixel(i, j).R);
  78. }
  79. }
  80. double average = tempList.Average();
  81. Color color = new Color();
  82. for (int i = 0; i < result.Width; i++)
  83. {
  84. for (int j = 0; j < result.Height; j++)
  85. {
  86. color = result.GetPixel(i, j);
  87. if ((color.R + color.G + color.B) / 3 > average)
  88. {
  89. result.SetPixel(i, j, Color.White);
  90. }
  91. else
  92. {
  93. result.SetPixel(i, j, Color.Black);
  94. }
  95. }
  96. }
  97. return result;
  98. }
  99. public static Bitmap ToGray(Bitmap bmp)
  100. {
  101. for (int i = 0; i < bmp.Width; i++)
  102. {
  103. for (int j = 0; j < bmp.Height; j++)
  104. {
  105. //获取该点的像素的RGB的颜色
  106. Color color = bmp.GetPixel(i, j);
  107. //利用公式计算灰度值
  108. int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);
  109. Color newColor = Color.FromArgb(gray, gray, gray);
  110. bmp.SetPixel(i, j, newColor);
  111. }
  112. }
  113. return bmp;
  114. }
  115. public static Bitmap GrayReverse(Bitmap bmp)
  116. {
  117. for (int i = 0; i < bmp.Width; i++)
  118. {
  119. for (int j = 0; j < bmp.Height; j++)
  120. {
  121. //获取该点的像素的RGB的颜色
  122. Color color = bmp.GetPixel(i, j);
  123. Color newColor = Color.FromArgb(255 - color.R, 255 - color.G, 255 - color.B);
  124. bmp.SetPixel(i, j, newColor);
  125. }
  126. }
  127. return bmp;
  128. }
  129. public static Bitmap ConvertTo1Bpp1(Bitmap bmp)
  130. {
  131. int average = 0;
  132. for (int i = 0; i < bmp.Width; i++)
  133. {
  134. for (int j = 0; j < bmp.Height; j++)
  135. {
  136. Color color = bmp.GetPixel(i, j);
  137. average += color.B;
  138. }
  139. }
  140. average = (int)average / (bmp.Width * bmp.Height);
  141. for (int i = 0; i < bmp.Width; i++)
  142. {
  143. for (int j = 0; j < bmp.Height; j++)
  144. {
  145. //获取该点的像素的RGB的颜色
  146. Color color = bmp.GetPixel(i, j);
  147. int value = 255 - color.B;
  148. Color newColor = value > average ? Color.FromArgb(0, 0, 0) : Color.FromArgb(255,255, 255);
  149. bmp.SetPixel(i, j, newColor);
  150. }
  151. }
  152. return bmp;
  153. }
  154. public static Bitmap ConvertTo1Bpp2(Bitmap img)
  155. {
  156. int w = img.Width;
  157. int h = img.Height;
  158. Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);
  159. BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite,PixelFormat.Format1bppIndexed);
  160. for (int y = 0; y < h; y++)
  161. {
  162. byte[] scan = new byte[(w + 7) / 8];
  163. for (int x = 0; x < w; x++)
  164. {
  165. Color c = img.GetPixel(x, y);
  166. if (c.GetBrightness() >= 0.5) scan[x / 8] |= (byte)(0x80 >> (x % 8));
  167. }
  168. Marshal.Copy(scan, 0, (IntPtr)((int)data.Scan0 + data.Stride * y), scan.Length);
  169. }
  170. return bmp;
  171. }
  172. }
  173. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号