所以利用C#做出一個簡易的手寫辨識
以下是程式碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace DigitRecognition
{
public partial class FormBoard : Form
{
Graphics g;
Pen pen;
public FormBoard()
{
InitializeComponent();
}
bool isDrawing = false;
List<Point> points = new List<Point>();
private void FormBoard_MouseDown(object sender, MouseEventArgs e)
{
points.Add(new Point(e.X, e.Y));
isDrawing = true;
}
private void FormBoard_MouseMove(object sender, MouseEventArgs e)
{
if (!isDrawing) return;
Point point = new Point(e.X, e.Y);
points.Add(point);
if (points.Count >= 2)
{
g.DrawLine(pen, points[points.Count-2], points[points.Count-1]);
}
}
private void FormBoard_MouseUp(object sender, MouseEventArgs e)
{
isDrawing = false;
Point point = new Point(-1, -1);
points.Add(point);
}
private void buttonRun_Click(object sender, EventArgs e)
{
List<Button> seg7buttons = new List<Button>();
StringBuilder seg7flags = new StringBuilder("0000000");
seg7buttons.Add(button1);
seg7buttons.Add(button2);
seg7buttons.Add(button3);
seg7buttons.Add(button4);
seg7buttons.Add(button5);
seg7buttons.Add(button6);
seg7buttons.Add(button7);
foreach (Point p in points)
{
Trace.WriteLine(p.ToString());
for (int i=0; i<seg7buttons.Count; i++) {
Rectangle r = seg7buttons[i].Bounds;
if (r.Contains(p))
seg7flags[i] = '1';
}
}
labelPattern.Text = "樣式為:"+seg7flags.ToString();
labelAnswer.Text = "辨識結果為:"+checkAnswer(seg7flags.ToString());
}
String[] seg7patterns = new String[10] {
"1111110", // 0
"0110000", // 1
"1101101", // 2
"1111001", // 3
"0110011", // 4
"1011011", // 5
"1011111", // 6
"1110000", // 7
"1111111", // 8
"1111011" // 9
};
String seg7answer="0123456789";
public char checkAnswer(String seg7flags)
{
for (int i = 0; i < seg7patterns.Length; i++)
{
if (seg7flags.Equals(seg7patterns[i]))
return seg7answer[i];
}
return '?';
}
private void buttonClear_Click(object sender, EventArgs e)
{
points.Clear();
g.Clear(Color.White);
}
private void FormBoard_Load(object sender, EventArgs e)
{
g = this.CreateGraphics();
pen = new Pen(Color.Black, 3);
buttonClear_Click(this, null);
}
}
}










