C#(VS10)调用HALCON12----实现数字识别
参考自:http://www.cnblogs.com/hanzhaoxin/archive/2013/02/07/2908924.html
1、HALCON源码
*读取图片 read_image(Image,'E:/1.jpg') *图像处理 decompose3(Image, ImageR, ImageG, ImageB) threshold (ImageG, Regions, 0, 183) connection (Regions, Connection) select_shape (Connection, SelectedRegions, 'area', 'and', 1987.72, 7500) read_ocr_class_mlp('Document_0-9_NoRej.omc',OCRHandle) do_ocr_multi_class_mlp(SelectedRegions,ImageG,OCRHandle, Class, Confidence)
2、使用HALCON导出C#代码
sce.cs代码为:
//
// File generated by HDevelop for HALCON/DOTNET (C#) Version 12.0
//
// This file is intended to be used with the HDevelopTemplate or
// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#
using System;
using HalconDotNet;
public partial class HDevelopExport
{
public HTuple hv_ExpDefaultWinHandle;
// Main procedure
private void action()
{
// Local iconic variables
HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB;
HObject ho_Regions, ho_Connection, ho_SelectedRegions;
// Local control variables
HTuple hv_OCRHandle = null, hv_Class = null;
HTuple hv_Confidence = null;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.GenEmptyObj(out ho_ImageR);
HOperatorSet.GenEmptyObj(out ho_ImageG);
HOperatorSet.GenEmptyObj(out ho_ImageB);
HOperatorSet.GenEmptyObj(out ho_Regions);
HOperatorSet.GenEmptyObj(out ho_Connection);
HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
//读取图片
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, "E:/1.jpg");
//图像处理
ho_ImageR.Dispose();ho_ImageG.Dispose();ho_ImageB.Dispose();
HOperatorSet.Decompose3(ho_Image, out ho_ImageR, out ho_ImageG, out ho_ImageB
);
ho_Regions.Dispose();
HOperatorSet.Threshold(ho_ImageG, out ho_Regions, 0, 183);
ho_Connection.Dispose();
HOperatorSet.Connection(ho_Regions, out ho_Connection);
ho_SelectedRegions.Dispose();
HOperatorSet.SelectShape(ho_Connection, out ho_SelectedRegions, "area", "and",
1987.72, 7500);
HOperatorSet.ReadOcrClassMlp("Document_0-9_NoRej.omc", out hv_OCRHandle);
HOperatorSet.DoOcrMultiClassMlp(ho_SelectedRegions, ho_ImageG, hv_OCRHandle,
out hv_Class, out hv_Confidence);
ho_Image.Dispose();
ho_ImageR.Dispose();
ho_ImageG.Dispose();
ho_ImageB.Dispose();
ho_Regions.Dispose();
ho_Connection.Dispose();
ho_SelectedRegions.Dispose();
}
public void InitHalcon()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("width", 512);
HOperatorSet.SetSystem("height", 512);
}
public void RunHalcon(HTuple Window)
{
hv_ExpDefaultWinHandle = Window;
action();
}
}
3、C#调用HALCON
(1)新建一个C#窗体程序:Cha_Test。
(2)引用halcondotnet.dll和导出的sce.cs文件。并对sce.cs中的代码进行修改。
修改后的sce.cs代码:
//
// File generated by HDevelop for HALCON/DOTNET (C#) Version 12.0
//
// This file is intended to be used with the HDevelopTemplate or
// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c#
using System;
using HalconDotNet;
public partial class HDevelopExport
{
public HTuple hv_ExpDefaultWinHandle;
HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB;
HObject ho_Regions, ho_Connection, ho_SelectedRegions;
// Local control variables
HTuple hv_OCRHandle, hv_Confidence;
public HTuple hv_Class;
public void InitHalcon()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("do_low_error", "false");
}
public void ReadImage(HTuple Window, string ImagePath)
{
hv_ExpDefaultWinHandle = Window;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
//读取图片
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, ImagePath);
HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);
}
public void NumberRecognition()
{
HOperatorSet.GenEmptyObj(out ho_ImageR);
HOperatorSet.GenEmptyObj(out ho_ImageG);
HOperatorSet.GenEmptyObj(out ho_ImageB);
HOperatorSet.GenEmptyObj(out ho_Regions);
HOperatorSet.GenEmptyObj(out ho_Connection);
HOperatorSet.GenEmptyObj(out ho_SelectedRegions);
//图像处理
ho_ImageR.Dispose();
ho_ImageG.Dispose();
ho_ImageB.Dispose();
HOperatorSet.Decompose3(ho_Image, out ho_ImageR, out ho_ImageG, out ho_ImageB);
ho_Regions.Dispose();
HOperatorSet.Threshold(ho_ImageG, out ho_Regions, 0, 183);
ho_Connection.Dispose();
HOperatorSet.Connection(ho_Regions, out ho_Connection);
ho_SelectedRegions.Dispose();
HOperatorSet.SelectShape(ho_Connection, out ho_SelectedRegions, "area", "and",1987.72, 7500);
HOperatorSet.ReadOcrClassMlp("Document_0-9_NoRej.omc", out hv_OCRHandle);
HOperatorSet.DoOcrMultiClassMlp(ho_SelectedRegions, ho_ImageG, hv_OCRHandle,out hv_Class, out hv_Confidence);
ho_Image.Dispose();
ho_ImageR.Dispose();
ho_ImageG.Dispose();
ho_ImageB.Dispose();
ho_Regions.Dispose();
ho_Connection.Dispose();
ho_SelectedRegions.Dispose();
}
}
(3)修改Form1.cs代码:
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 HalconDotNet; //引用HALCON命名空间 namespace Cha_Test { public partial class Form1 : Form { HDevelopExport HD = new HDevelopExport();//增加代码 public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string ImagePath; OpenFileDialog filename = new OpenFileDialog(); //引用C#OpenFileDialog类 filename.Filter = "JPEG文件|*.jpg*|BMP文件|*.bmp*|TIFF文件|*.tiff*"; filename.RestoreDirectory = true; filename.FilterIndex = 1; if (filename.ShowDialog() == DialogResult.OK) { ImagePath = filename.FileName; HD.ReadImage(hWindowControl1.HalconWindow, ImagePath); } } private void button2_Click(object sender, EventArgs e) { HD.NumberRecognition(); textBox1.Text = HD.hv_Class.ToString(); } } }
4、运行结果