您的位置:首页 > 编程语言 > C#

C#(VS10)调用HALCON12----实现数字识别

2017-03-01 16:05 411 查看
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、运行结果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: