实例介绍
【实例简介】
点阵获取字模,匹配识别图片字体
【实例截图】
【核心代码】
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.OleDb;
namespace OCR
{
struct Suited
{
public string Character; //字符名
public int MaxMatch; //匹配率
public float MaxUseCount; //使用频率
public Suited(string Character, int MaxMatch, float MaxUseCount)
{
this.Character = Character;
this.MaxMatch = MaxMatch;
this.MaxUseCount = MaxUseCount;
}
}
/// <summary>
/// OCR 的摘要说明。
/// </summary>
public class FormMain : System.Windows.Forms.Form
{
private System.Windows.Forms.Label TeachLabelText;
private System.Windows.Forms.TextBox inputLearnCharacter;
private System.Windows.Forms.Button buttonLearnConfirm;
private System.Windows.Forms.Button buttonLearnCancel;
private System.Windows.Forms.Label textResult;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
string strCaption = "";
bool currentlyDrawing = false;
Bitmap userDrawAreaBmp;
Bitmap userTemplateAreaBmp;
ArrayList arrCurrentEigenvalue;
ArrayList resultList;
OleDbConnection DbConn;
OleDbCommand DbCmd;
public int SplitWidth = 20;
public int SplitHeight = 20;
public Size PointSize = new Size(10, 10);
private System.Windows.Forms.GroupBox frameArea1;
private System.Windows.Forms.GroupBox frameArea3;
private System.Windows.Forms.PictureBox userDrawArea;
private System.Windows.Forms.Button buttonRecognise;
private System.Windows.Forms.Button buttonClearScreen;
private System.Windows.Forms.PictureBox userTemplateArea;
private System.Windows.Forms.ListBox ResultList;
private System.Windows.Forms.ProgressBar progressRecognition;
private System.Windows.Forms.Label progressText;
private System.Windows.Forms.Label resultText;
private System.Windows.Forms.TrackBar tbThreshold;
private System.Windows.Forms.Button AutoLearn;
private System.Windows.Forms.OpenFileDialog openFileDialog1;
private System.Windows.Forms.Button btnBreak;
private TextBox tbG;
private Button button1;
private Button button2;
private System.Windows.Forms.Label precisionText;
public FormMain()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.TeachLabelText = new System.Windows.Forms.Label();
this.inputLearnCharacter = new System.Windows.Forms.TextBox();
this.buttonLearnConfirm = new System.Windows.Forms.Button();
this.buttonLearnCancel = new System.Windows.Forms.Button();
this.textResult = new System.Windows.Forms.Label();
this.frameArea1 = new System.Windows.Forms.GroupBox();
this.button2 = new System.Windows.Forms.Button();
this.tbG = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.buttonRecognise = new System.Windows.Forms.Button();
this.buttonClearScreen = new System.Windows.Forms.Button();
this.userDrawArea = new System.Windows.Forms.PictureBox();
this.frameArea3 = new System.Windows.Forms.GroupBox();
this.btnBreak = new System.Windows.Forms.Button();
this.AutoLearn = new System.Windows.Forms.Button();
this.userTemplateArea = new System.Windows.Forms.PictureBox();
this.ResultList = new System.Windows.Forms.ListBox();
this.progressRecognition = new System.Windows.Forms.ProgressBar();
this.progressText = new System.Windows.Forms.Label();
this.resultText = new System.Windows.Forms.Label();
this.tbThreshold = new System.Windows.Forms.TrackBar();
this.precisionText = new System.Windows.Forms.Label();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.frameArea1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.userDrawArea)).BeginInit();
this.frameArea3.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.userTemplateArea)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.tbThreshold)).BeginInit();
this.SuspendLayout();
//
// TeachLabelText
//
this.TeachLabelText.AutoSize = true;
this.TeachLabelText.Location = new System.Drawing.Point(13, 420);
this.TeachLabelText.Name = "TeachLabelText";
this.TeachLabelText.Size = new System.Drawing.Size(161, 18);
this.TeachLabelText.TabIndex = 7;
this.TeachLabelText.Text = "请输入学习的字符:";
//
// inputLearnCharacter
//
this.inputLearnCharacter.Location = new System.Drawing.Point(13, 456);
this.inputLearnCharacter.MaxLength = 1;
this.inputLearnCharacter.Name = "inputLearnCharacter";
this.inputLearnCharacter.Size = new System.Drawing.Size(40, 28);
this.inputLearnCharacter.TabIndex = 8;
//
// buttonLearnConfirm
//
this.buttonLearnConfirm.Location = new System.Drawing.Point(67, 456);
this.buttonLearnConfirm.Name = "buttonLearnConfirm";
this.buttonLearnConfirm.Size = new System.Drawing.Size(66, 34);
this.buttonLearnConfirm.TabIndex = 9;
this.buttonLearnConfirm.Text = "确认";
this.buttonLearnConfirm.Click = new System.EventHandler(this.buttonLearnConfirm_Click);
//
// buttonLearnCancel
//
this.buttonLearnCancel.Location = new System.Drawing.Point(133, 456);
this.buttonLearnCancel.Name = "buttonLearnCancel";
this.buttonLearnCancel.Size = new System.Drawing.Size(67, 34);
this.buttonLearnCancel.TabIndex = 10;
this.buttonLearnCancel.Text = "取消";
this.buttonLearnCancel.Click = new System.EventHandler(this.buttonLearnCancel_Click);
//
// textResult
//
this.textResult.AutoSize = true;
this.textResult.Location = new System.Drawing.Point(13, 516);
this.textResult.Name = "textResult";
this.textResult.Size = new System.Drawing.Size(143, 18);
this.textResult.TabIndex = 11;
this.textResult.Text = "字符识别状态...";
//
// frameArea1
//
this.frameArea1.Controls.Add(this.button2);
this.frameArea1.Controls.Add(this.tbG);
this.frameArea1.Controls.Add(this.button1);
this.frameArea1.Controls.Add(this.buttonRecognise);
this.frameArea1.Controls.Add(this.buttonClearScreen);
this.frameArea1.Controls.Add(this.userDrawArea);
this.frameArea1.Location = new System.Drawing.Point(13, 12);
this.frameArea1.Name = "frameArea1";
this.frameArea1.Size = new System.Drawing.Size(360, 396);
this.frameArea1.TabIndex = 12;
this.frameArea1.TabStop = false;
this.frameArea1.Text = "用户绘制区域";
//
// button2
//
this.button2.Location = new System.Drawing.Point(313, 343);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(34, 47);
this.button2.TabIndex = 9;
this.button2.Text = "图片";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click = new System.EventHandler(this.button2_Click);
//
// tbG
//
this.tbG.Location = new System.Drawing.Point(175, 353);
this.tbG.MaxLength = 1;
this.tbG.Name = "tbG";
this.tbG.Size = new System.Drawing.Size(91, 28);
this.tbG.TabIndex = 8;
//
// button1
//
this.button1.Location = new System.Drawing.Point(272, 342);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(34, 48);
this.button1.TabIndex = 7;
this.button1.Text = "生成";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click = new System.EventHandler(this.button1_Click);
//
// buttonRecognise
//
this.buttonRecognise.Location = new System.Drawing.Point(88, 348);
this.buttonRecognise.Name = "buttonRecognise";
this.buttonRecognise.Size = new System.Drawing.Size(73, 34);
this.buttonRecognise.TabIndex = 6;
this.buttonRecognise.Text = "识别";
this.buttonRecognise.Click = new System.EventHandler(this.buttonRecognise_Click);
//
// buttonClearScreen
//
this.buttonClearScreen.Location = new System.Drawing.Point(13, 348);
this.buttonClearScreen.Name = "buttonClearScreen";
this.buttonClearScreen.Size = new System.Drawing.Size(69, 34);
this.buttonClearScreen.TabIndex = 5;
this.buttonClearScreen.Text = "清除";
this.buttonClearScreen.Click = new System.EventHandler(this.buttonClearScreen_Click);
//
// userDrawArea
//
this.userDrawArea.BackColor = System.Drawing.Color.White;
this.userDrawArea.Location = new System.Drawing.Point(13, 36);
this.userDrawArea.Name = "userDrawArea";
this.userDrawArea.Size = new System.Drawing.Size(334, 300);
this.userDrawArea.TabIndex = 1;
this.userDrawArea.TabStop = false;
this.userDrawArea.MouseDown = new System.Windows.Forms.MouseEventHandler(this.userDrawArea_MouseDown);
this.userDrawArea.MouseMove = new System.Windows.Forms.MouseEventHandler(this.userDrawArea_MouseMove);
this.userDrawArea.MouseUp = new System.Windows.Forms.MouseEventHandler(this.userDrawArea_MouseUp);
//
// frameArea3
//
this.frameArea3.Controls.Add(this.btnBreak);
this.frameArea3.Controls.Add(this.AutoLearn);
this.frameArea3.Controls.Add(this.userTemplateArea);
this.frameArea3.Location = new System.Drawing.Point(387, 12);
this.frameArea3.Name = "frameArea3";
this.frameArea3.Size = new System.Drawing.Size(360, 396);
this.frameArea3.TabIndex = 14;
this.frameArea3.TabStop = false;
this.frameArea3.Text = "区域分析";
//
// btnBreak
//
this.btnBreak.Location = new System.Drawing.Point(187, 348);
this.btnBreak.Name = "btnBreak";
this.btnBreak.Size = new System.Drawing.Size(160, 34);
this.btnBreak.TabIndex = 5;
this.btnBreak.Text = "中断学习";
this.btnBreak.Click = new System.EventHandler(this.btnBreak_Click);
//
// AutoLearn
//
this.AutoLearn.Location = new System.Drawing.Point(13, 348);
this.AutoLearn.Name = "AutoLearn";
this.AutoLearn.Size = new System.Drawing.Size(160, 34);
this.AutoLearn.TabIndex = 4;
this.AutoLearn.Text = "自动学习";
this.AutoLearn.Click = new System.EventHandler(this.AutoLearn_Click);
//
// userTemplateArea
//
this.userTemplateArea.BackColor = System.Drawing.Color.White;
this.userTemplateArea.Location = new System.Drawing.Point(13, 36);
this.userTemplateArea.Name = "userTemplateArea";
this.userTemplateArea.Size = new System.Drawing.Size(334, 300);
this.userTemplateArea.TabIndex = 3;
this.userTemplateArea.TabStop = false;
//
// ResultList
//
this.ResultList.ColumnWidth = 20;
this.ResultList.HorizontalScrollbar = true;
this.ResultList.ItemHeight = 18;
this.ResultList.Location = new System.Drawing.Point(388, 416);
this.ResultList.MultiColumn = true;
this.ResultList.Name = "ResultList";
this.ResultList.Size = new System.Drawing.Size(333, 40);
this.ResultList.TabIndex = 15;
this.ResultList.DoubleClick = new System.EventHandler(this.ResultList_DoubleClick);
//
// progressRecognition
//
this.progressRecognition.Location = new System.Drawing.Point(387, 462);
this.progressRecognition.Name = "progressRecognition";
this.progressRecognition.Size = new System.Drawing.Size(333, 34);
this.progressRecognition.TabIndex = 16;
//
// progressText
//
this.progressText.AutoSize = true;
this.progressText.Location = new System.Drawing.Point(293, 468);
this.progressText.Name = "progressText";
this.progressText.Size = new System.Drawing.Size(89, 18);
this.progressText.TabIndex = 17;
this.progressText.Text = "处理进度:";
//
// resultText
//
this.resultText.AutoSize = true;
this.resultText.Location = new System.Drawing.Point(293, 420);
this.resultText.Name = "resultText";
this.resultText.Size = new System.Drawing.Size(89, 18);
this.resultText.TabIndex = 18;
this.resultText.Text = "可选文字:";
//
// tbThreshold
//
this.tbThreshold.Location = new System.Drawing.Point(388, 502);
this.tbThreshold.Maximum = 400;
this.tbThreshold.Minimum = 1;
this.tbThreshold.Name = "tbThreshold";
this.tbThreshold.Size = new System.Drawing.Size(332, 69);
this.tbThreshold.TabIndex = 100;
this.tbThreshold.TickFrequency = 10;
this.tbThreshold.TickStyle = System.Windows.Forms.TickStyle.None;
this.tbThreshold.Value = 200;
//
// precisionText
//
this.precisionText.AutoSize = true;
this.precisionText.Location = new System.Drawing.Point(293, 516);
this.precisionText.Name = "precisionText";
this.precisionText.Size = new System.Drawing.Size(89, 18);
this.precisionText.TabIndex = 20;
this.precisionText.Text = "识别精度:";
//
// openFileDialog1
//
this.openFileDialog1.Filter = "文本文件|*.txt";
this.openFileDialog1.Title = "请选择源文件!用于学习!";
//
// FormMain
//
this.AutoScaleBaseSize = new System.Drawing.Size(10, 21);
this.ClientSize = new System.Drawing.Size(758, 550);
this.Controls.Add(this.precisionText);
this.Controls.Add(this.tbThreshold);
this.Controls.Add(this.resultText);
this.Controls.Add(this.progressText);
this.Controls.Add(this.progressRecognition);
this.Controls.Add(this.ResultList);
this.Controls.Add(this.frameArea3);
this.Controls.Add(this.frameArea1);
this.Controls.Add(this.textResult);
this.Controls.Add(this.buttonLearnCancel);
this.Controls.Add(this.buttonLearnConfirm);
this.Controls.Add(this.inputLearnCharacter);
this.Controls.Add(this.TeachLabelText);
this.Name = "FormMain";
this.Text = "OCR 文字识别";
this.Load = new System.EventHandler(this.FormMain_Load);
this.frameArea1.ResumeLayout(false);
this.frameArea1.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.userDrawArea)).EndInit();
this.frameArea3.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.userTemplateArea)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.tbThreshold)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new FormMain());
}
private void ClearGraphics(Image img, Color clearColor)
{
if (img != null)
{
Graphics g = Graphics.FromImage(img);
g.FillRectangle(new SolidBrush(clearColor), 0, 0, img.Width, img.Height);
g.Dispose();
}
userDrawArea.Refresh();
userTemplateArea.Refresh();
}
private void buttonLearnCancel_Click(object sender, System.EventArgs e)
{
this.inputLearnCharacter.Text = "";
}
private void buttonClearScreen_Click(object sender, System.EventArgs e)
{
arrCurrentEigenvalue.Clear();
arrCurrentEigenvalue.TrimToSize();
this.textResult.Text = "";
this.progressRecognition.Value = 0;
ClearGraphics(userDrawArea.Image, Color.White);
ClearGraphics(userTemplateArea.Image, Color.White);
}
private void GraspRawData()
{
bool bool1stScan = true;
int ax, ay, bx, by;
this.ClearGraphics(this.userTemplateArea.Image, Color.White);
ax = ay = bx = by = 0;
Graphics g = Graphics.FromImage(userTemplateAreaBmp);
int b = 0;
for (int i = 0; i < userDrawAreaBmp.Width; i = (userDrawAreaBmp.Width / this.SplitWidth) / 2)
for (int j = 0; j < userDrawAreaBmp.Height; j = (userDrawAreaBmp.Height / this.SplitHeight) / 2)
{
//if (userDrawAreaBmp.GetPixel(i, j).ToArgb() == Color.Black.ToArgb())
if (userDrawAreaBmp.GetPixel(i, j).B < 100)
{
if (!bool1stScan)
{
if (i < ax) ax = i;
if (i >= bx) bx = i;
if (j < ay) ay = j;
if (j >= by) by = j;
}
else
{
bool1stScan = false;
ax = i;
bx = i;
ay = j;
by = j;
}
}
b ;
}
this.arrCurrentEigenvalue.Clear();
this.arrCurrentEigenvalue.TrimToSize();
if ((bx - ax) != 0 && (by - ay) != 0 && (((bx - ax) > (userDrawAreaBmp.Width / this.SplitWidth) / 2) || ((by - ay) > (userDrawAreaBmp.Height / this.SplitHeight) / 2)))
{
this.ClearGraphics(this.userTemplateArea.Image, Color.White);
Bitmap memBmp = new Bitmap(userTemplateAreaBmp.Width, userTemplateAreaBmp.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
Graphics memGp = Graphics.FromImage(memBmp);
memGp.Clear(Color.White);
memGp.DrawImage(userDrawAreaBmp, new Rectangle(0, 0, memBmp.Width - 1, memBmp.Height - 1), ax, ay, bx - ax, by - ay, GraphicsUnit.Pixel);
int pw = (userDrawAreaBmp.Width / this.SplitWidth);
int ph = (userDrawAreaBmp.Height / this.SplitHeight);
for (int i = 0; i < memBmp.Width; i = (memBmp.Width / this.SplitWidth))
{
for (int j = 0; j < memBmp.Height; j = (memBmp.Height / this.SplitHeight))
{
//if (memBmp.GetPixel(i, j).ToArgb() == Color.Black.ToArgb())
if (memBmp.GetPixel(i, j).B < 100)
{
g.FillRectangle(new SolidBrush(Color.Black), i - (pw / 2), j - (ph / 2), pw, ph);
g.DrawRectangle(new Pen(Color.White, 1f), i - (pw / 2), j - (ph / 2), pw, ph);
arrCurrentEigenvalue.Add("1");
}
else
{
arrCurrentEigenvalue.Add("0");
}
}
}
memGp.Dispose();
memBmp.Dispose();
}
//textResult.Text = this.arrCurrentEigenvalue.Count.ToString();
g.Dispose();
userTemplateArea.Refresh();
}
/// <summary>
/// 保存学习结果
/// </summary>
private void SaveLearn(string LearnCharacter)
{
if (arrCurrentEigenvalue.Count <= 0)
{
return;
}
//建立特征码
string Eigenvalue = "";
foreach (string ce in this.arrCurrentEigenvalue)
Eigenvalue = ce;
try
{
DbCmd.CommandText = string.Format("select Count(*) as exp1 from tbLearn where LearnCharacter = '{0}'", LearnCharacter.Replace("'", "''"));
OleDbDataReader ddr = DbCmd.ExecuteReader();
bool isUpdate = false;
while (ddr.Read())
{
if (ddr.GetInt32(0) != 0)
{
//更新
isUpdate = true;
break;
}
}
ddr.Close();
if (isUpdate)
DbCmd.CommandText = string.Format("update tbLearn set Eigenvalue='{0}' where LearnCharacter = '{1}'", Eigenvalue, LearnCharacter.Replace("'", "''"));
else
DbCmd.CommandText = string.Format("insert into tbLearn (LearnCharacter,Eigenvalue,Frequency)values('{0}','{1}',0)", LearnCharacter.Replace("'", "''"), Eigenvalue);
DbCmd.ExecuteNonQuery();
}
catch (Exception ex)
{
this.strCaption = ex.Message;
}
finally
{
this.textResult.Text = strCaption;
}
}
private void buttonLearnConfirm_Click(object sender, System.EventArgs e)
{
if (this.inputLearnCharacter.Text.Length == 0)
return;
SaveLearn(this.inputLearnCharacter.Text);
}
private void userDrawArea_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.currentlyDrawing = true;
userDrawArea_MouseMove(sender, e);
}
private void userDrawArea_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (this.currentlyDrawing)
{
Graphics g = Graphics.FromImage(userDrawAreaBmp);
g.FillPie(new SolidBrush(Color.Black), e.X - (PointSize.Width / 2), e.Y - (PointSize.Height / 2), PointSize.Width, PointSize.Height, 0f, 360f);
g.Dispose();
userDrawArea.Refresh();
}
}
private void userDrawArea_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
this.currentlyDrawing = false;
this.GraspRawData();
}
private void FormMain_Load(object sender, System.EventArgs e)
{
Image userDrawAreaImage = userDrawAreaBmp = new Bitmap(200, 200, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
using (Graphics g = Graphics.FromImage(userDrawAreaImage))
{
g.Clear(Color.White);
}
Image userTemplateAreaImage = userTemplateAreaBmp = new Bitmap(200, 200, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
using (Graphics g = Graphics.FromImage(userTemplateAreaImage))
{
g.Clear(Color.White);
}
this.userDrawArea.Image = userDrawAreaImage;
this.userTemplateArea.Image = userTemplateAreaImage;
//PointSize = new Size(10,10);
arrCurrentEigenvalue = new ArrayList(this.SplitWidth * this.SplitHeight);
resultList = new ArrayList();
DbConn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=" Application.ExecutablePath.Substring(0, Application.ExecutablePath.LastIndexOf("\\")) @"\Learn.mdb;");
DbCmd = new OleDbCommand();
try
{
DbConn.Open();
DbCmd.Connection = this.DbConn;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Application.Exit();
}
}
private void buttonRecognise_Click(object sender, System.EventArgs e)
{
//识别
DbCmd.CommandText = "select LearnCharacter,Eigenvalue,Frequency from tbLearn order by Frequency";
OleDbDataReader ddr = DbCmd.ExecuteReader();
int maxMatch = 0;
progressRecognition.Value = 0;
progressRecognition.Maximum = ddr.GetSchemaTable().Rows.Count;
progressRecognition.Minimum = 0;
resultList.Clear();
resultList.TrimToSize();
while (ddr.Read())
{
//比较
if (!ddr.IsDBNull(1))
maxMatch = Match(ddr.GetString(1));
//MessageBox.Show (maxMatch.ToString());
//保留匹配率字符的精度,建议10%
if (maxMatch >= tbThreshold.Value)
{
Suited suited = new Suited(ddr.GetString(0), maxMatch, ddr.GetFloat(2));
resultList.Add(suited);
}
//找出匹配率最高的
resultList.Sort(0, resultList.Count, new MaxMatchSort());
//保存100个字符
// while(resultList.Count>(this.SplitWidth * this.SplitHeight))
// {
// resultList.RemoveAt(resultList.Count-1);
// }
if (progressRecognition.Value < progressRecognition.Maximum)
progressRecognition.Value = 1;
}
ddr.Close();
//分离结果
//找出频率最高的字符
resultList.Sort(0, resultList.Count, new MaxUseCountSort());
//保存匹配率最高的10个字符
while (resultList.Count > 10)
{
resultList.RemoveAt(resultList.Count - 1);
}
//找出匹配率最高的
resultList.Sort(0, resultList.Count, new MaxMatchSort());
ResultList.Items.Clear();
foreach (Suited s in resultList)
{
ResultList.Items.Add(s.Character);
}
resultList.Clear();
resultList.TrimToSize();
progressRecognition.Value = progressRecognition.Maximum;
}
private int Match(string Eigenvalue)
{
int maxMatch = 0;
string c = "";
string e = "";
int d = 0;
if (Eigenvalue.Length < (this.SplitWidth * this.SplitHeight))
return 0;
for (int i = 0; i < this.SplitWidth; i )
{
for (int j = 0; j < this.SplitHeight; j )
{
if (d >= this.arrCurrentEigenvalue.Count)
return maxMatch;
c = Eigenvalue.Substring(d, 1);
e = (string)this.arrCurrentEigenvalue[d];
if (c == "1")
{
if (e == "1")
maxMatch ;
else
maxMatch--;
}
else
{
if (e == "0")
maxMatch ;
else
maxMatch--;
}
d ;
}
}
return maxMatch;
}
private void ResultList_DoubleClick(object sender, System.EventArgs e)
{
string LearnCharacter = (string)ResultList.SelectedItem "";
if (LearnCharacter != "")
{
DbCmd.CommandText = string.Format("update tbLearn set Frequency=Frequency 0.01 where LearnCharacter = '{0}'", LearnCharacter.Replace("'", "''"));
DbCmd.ExecuteNonQuery();
MessageBox.Show(LearnCharacter);
}
}
private void AutoLearn_Click(object sender, System.EventArgs e)
{
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
//开始分析
System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName, System.Text.Encoding.Default);
string allText = sr.ReadToEnd();
string c = "";
sr.Close();
allText = allText.Replace(" ", "");
allText = allText.Replace("\r", "");
allText = allText.Replace("\n", "");
allText = allText.Replace("\t", "");
Bitmap memBmp = new Bitmap(this.userDrawAreaBmp.Width, this.userDrawAreaBmp.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
Graphics memGp = Graphics.FromImage(memBmp);
Graphics uGp = Graphics.FromImage(userDrawAreaBmp);
progressRecognition.Value = 0;
progressRecognition.Minimum = 0;
progressRecognition.Maximum = allText.Length - 1;
btnBreak.Tag = 0;
for (int i = 0; i < allText.Length; i )
{
c = allText.Substring(i, 1);
memGp.Clear(Color.White);
//memGp.FillRectangle(new SolidBrush(Color.White), 0, 0, memBmp.Width, memBmp.Height);
memGp.DrawString(c, new Font("宋体", 100f, FontStyle.Bold), new SolidBrush(Color.Black), 0, 0);
//memGp.DrawString(c, new Font("楷体_GB2312", 100f, FontStyle.Bold), new SolidBrush(Color.Black), 0, 0);
uGp.Clear(Color.White);
//uGp.FillRectangle(new SolidBrush(Color.White), 0, 0, userDrawAreaBmp.Width, userDrawAreaBmp.Height);
uGp.DrawImage(memBmp, new Rectangle(0, 0, userDrawAreaBmp.Width, userDrawAreaBmp.Height), 0, 0, memBmp.Width, memBmp.Height, System.Drawing.GraphicsUnit.Pixel);
//分析特征码
GraspRawData();
//保存特征码
SaveLearn(c);
textResult.Text = "正在自学习:" c;
try
{
textResult.Refresh();
}
catch {; }
if (progressRecognition.Value < progressRecognition.Maximum)
progressRecognition.Value = 1;
if ((int)btnBreak.Tag == 1)
break;
Application.DoEvents();
}
uGp.Dispose();
memGp.Dispose();
memBmp.Dispose();
MessageBox.Show("自学习完毕!");
}
}
private void btnBreak_Click(object sender, System.EventArgs e)
{
btnBreak.Tag = 1;
}
private void button1_Click(object sender, EventArgs e)
{
Bitmap memBmp = new Bitmap(this.userDrawAreaBmp.Width, this.userDrawAreaBmp.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
Graphics memGp = Graphics.FromImage(memBmp);
memGp.Clear(Color.White);
Graphics uGp = Graphics.FromImage(userDrawAreaBmp);
memGp.Clear(Color.White);
//memGp.FillRectangle(new SolidBrush(Color.White), 0, 0, memBmp.Width, memBmp.Height);
memGp.DrawString(tbG.Text, new Font("宋体", 100f, FontStyle.Bold), new SolidBrush(Color.Black), 0, 0);
//memGp.DrawString(c, new Font("楷体_GB2312", 100f, FontStyle.Bold), new SolidBrush(Color.Black), 0, 0);
uGp.Clear(Color.White);
//uGp.FillRectangle(new SolidBrush(Color.White), 0, 0, userDrawAreaBmp.Width, userDrawAreaBmp.Height);
uGp.DrawImage(memBmp, new Rectangle(0, 0, userDrawAreaBmp.Width, userDrawAreaBmp.Height), 0, 0, memBmp.Width, memBmp.Height, System.Drawing.GraphicsUnit.Pixel);
//分析特征码
GraspRawData();
uGp.Dispose();
memGp.Dispose();
memBmp.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog opnDlg = new OpenFileDialog();
opnDlg.Filter = "所有图像文件 | *.bmp; *.pcx; *.png; *.jpg; *.gif;"
"*.tif; *.ico; *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf|"
"位图( *.bmp; *.jpg; *.png;...) | *.bmp; *.pcx; *.png; *.jpg; *.gif; *.tif; *.ico|"
"矢量图( *.wmf; *.eps; *.emf;...) | *.dxf; *.cgm; *.cdr; *.wmf; *.eps; *.emf";
opnDlg.Title = "打开图像文件";
opnDlg.ShowHelp = true;
if (opnDlg.ShowDialog() == DialogResult.OK)
{
var imgPath = opnDlg.FileName;
try
{
var img = Image.FromFile(imgPath);
using (Graphics uGp = Graphics.FromImage(userDrawAreaBmp))
{
uGp.DrawImage(img, 0, 0, userDrawAreaBmp.Width, userDrawAreaBmp.Height);
}
GraspRawData();
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
}
// private int BinToDec(string strBin)
// {
// int i = strBin.Length;
// int btd = 0;
// while(i>0)
// {
// if(strBin.Substring(i,1)=="1")
// btd = btd (int)Math.Pow(2,strBin.Length-i);
// i -- ;
// }
// return btd;
// }
//
// private string DecToBin(int intDec,int intDigit)
// {
// int intTemp = 0;
// string dtb = "";
// while(intDec>0 && intDigit>0)
// {
// intDigit--;
// intTemp = intDec % 2;
// if(intTemp!=0)
// {
// dtb = "1" dtb;
// intDec = (intDec-1) /2;
// }
// else
// {
// dtb = "0" dtb;
// intDec = intDec / 2;
// }
// }
//
// while(intDigit!=0)
// {
// intDigit --;
// dtb = "0" dtb;
// }
// return dtb;
// }
}
public class MaxMatchSort : IComparer
{
int IComparer.Compare(Object x, Object y)
{
Suited sx = (Suited)x;
Suited sy = (Suited)y;
CaseInsensitiveComparer cic = new CaseInsensitiveComparer();
return cic.Compare(sy.MaxMatch, sx.MaxMatch);
}
}
public class MaxUseCountSort : IComparer
{
int IComparer.Compare(Object x, Object y)
{
Suited sx = (Suited)x;
Suited sy = (Suited)y;
CaseInsensitiveComparer cic = new CaseInsensitiveComparer();
return cic.Compare(sy.MaxUseCount, sx.MaxUseCount);
}
}
}
标签: OCR
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论