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、运行结果
新闻热点
疑难解答