using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using OpenQA.Selenium.Appium.Windows;
using OpenQA.Selenium.Remote;
using System.IO;
using OpenQA.Selenium;
using AForge;
using AForge.Imaging;
using AForge.Imaging.Textures;
using AForge.Imaging.Filters;
using AForge.Math;
using asprise_ocr_api;
using IronOcr;
using System.Runtime.InteropServices;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//AspriseOCR.SetUp();
//AspriseOCR ocr = new AspriseOCR();
//ocr.StartEngine("eng", AspriseOCR.SPEED_FASTEST);
Bitmap a = new Bitmap(@"d:\4.png");
Bitmap b = ToGray(a);
Bitmap c = GrayReverse(b);
//Bitmap d = ConvertTo1Bpp1(c);
Bitmap d = GetBinaryzationImage1(c);
d.Save(@"d:\4.bmp");
//string s = ocr.Recognize(@"d:\3.bmp", -1, -1, -1, -1, -1, AspriseOCR.RECOGNIZE_TYPE_ALL, AspriseOCR.OUTPUT_FORMAT_PLAINTEXT);
//MessageBox.Show(s);
//ocr.StopEngine();
//var Ocr = new AutoOcr();
//var result = Ocr.Read(@"d:\4.bmp");
//MessageBox.Show(result.Text);
var Ocr = new AdvancedOcr()
{
CleanBackgroundNoise = true,
EnhanceContrast = true,
EnhanceResolution = true,
Language = IronOcr.Languages.English.OcrLanguagePack,
Strategy = IronOcr.AdvancedOcr.OcrStrategy.Advanced,
ColorSpace = AdvancedOcr.OcrColorSpace.Color,
DetectWhiteTextOnDarkBackgrounds = true,
InputImageType = AdvancedOcr.InputTypes.AutoDetect,
RotateAndStraighten = true,
ReadBarCodes = true,
ColorDepth = 4
};
var testImage = @"d:\4.bmp";
var Results = Ocr.Read(testImage);
//var Barcodes = Results.Barcodes.Select(b => b.Value);
MessageBox.Show(Results.Text);
}
private Bitmap GetBinaryzationImage1(Bitmap image)
{
Bitmap result = image.Clone() as Bitmap;
// 计算灰度平均值
List<int> tempList = new List<int>();
for (int i = 0; i < result.Width; i++)
{
for (int j = 0; j < result.Height; j++)
{
tempList.Add(result.GetPixel(i, j).R);
}
}
double average = tempList.Average();
Color color = new Color();
for (int i = 0; i < result.Width; i++)
{
for (int j = 0; j < result.Height; j++)
{
color = result.GetPixel(i, j);
if ((color.R + color.G + color.B) / 3 > average)
{
result.SetPixel(i, j, Color.White);
}
else
{
result.SetPixel(i, j, Color.Black);
}
}
}
return result;
}
public static 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;
}
public static 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;
}
public static Bitmap ConvertTo1Bpp1(Bitmap bmp)
{
int average = 0;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
Color color = bmp.GetPixel(i, j);
average += color.B;
}
}
average = (int)average / (bmp.Width * bmp.Height);
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
int value = 255 - color.B;
Color newColor = value > average ? Color.FromArgb(0, 0, 0) : Color.FromArgb(255,255, 255);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}
public static 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;
}
}
}
C# 图像基本处理和OCR
最新推荐文章于 2024-08-17 10:17:06 发布