1. 程式人生 > 其它 >Halcon引擎呼叫一一C#呼叫Halcon外部函式

Halcon引擎呼叫一一C#呼叫Halcon外部函式

技術標籤:halcon影象處理

1.首先先引用這兩樣東西,它在Halcon安裝目錄下。例如:E:\Halcon12\bin\dotnet35

在這裡插入圖片描述

using HalconDotNet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.
Forms; namespace Halcon外部函式的引擎呼叫 { public partial class Form1 : Form { private HDevEngine MyEngine = new HDevEngine(); //private HDevOpMultiWindowImpl MyHDevOperatorImpl; HDevOpFixedWindowImpl MyHDevOperatorImpl; private HWindow Window; string ProgramPathString;
string ProcedurePath; private HDevProgramCall ProgramCall; private HDevProcedureCall ProcCall1; private HDevProcedureCall ProcCall2; Timer myTimer = new Timer(); public Form1() { InitializeComponent(); //var ProcedurePath = AppDomain.CurrentDomain.BaseDirectory;//設定路徑為Debug下
//MyEngine.SetProcedurePath(ProcedurePath); ProcedurePath = @"C:\Users\shang\Desktop\C#\Halcon外部函式的引擎呼叫\procedures\"; //ProgramPathString = @"C:\Users\shang\Desktop\Halcon外部函式的引擎呼叫\procedures\主函式.hdev"; MyEngine.SetProcedurePath(ProcedurePath); Window = hWindowControl1.HalconWindow; Window.SetDraw("margin"); Window.SetLineWidth(3); Window.SetColor("red"); CreateTimer(); } private void button1_Click(object sender, EventArgs e) { MyHDevOperatorImpl = new HDevOpFixedWindowImpl(hWindowControl1.HalconWindow); MyEngine.SetHDevOperators(MyHDevOperatorImpl); try { //var Program = new HDevProgram(ProgramPathString); //ProgramCall = new HDevProgramCall(Program); //MyEngine.SetProcedurePath(ProcedurePath); //var Program1 = new HDevProcedure("CreateShapeModel"); //var Program2 = new HDevProcedure("FindShapeModel"); MyEngine.SetProcedurePath(ProcedurePath); ProcCall1 = new HDevProcedureCall(new HDevProcedure("CreateShapeModel")); ProcCall2 = new HDevProcedureCall(new HDevProcedure("FindShapeModel")); MessageBox.Show("ok"); } catch (HDevEngineException Ex) { MessageBox.Show(Ex.Message, "HDevEngine Exception"); return; } catch { return; } } HTuple ModelId1; HObject Image1; private void button2_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); if (dlg.ShowDialog() == DialogResult.OK) { HOperatorSet.ReadImage(out Image1, dlg.FileName); } try { //HObject Image1; //HOperatorSet.GenEmptyObj(out Image1); //Image1.Dispose(); //HOperatorSet.ReadImage(out Image1, "C:/Users/shang/Desktop/圖示&影象/影象/影象/LOK/5.png"); ProcCall1.SetInputIconicParamObject("Image", Image1); ProcCall1.SetInputCtrlParamTuple("WindowHandle", Window); ProcCall1.Execute(); ModelId1 = ProcCall1.GetOutputCtrlParamTuple("ModelId"); } catch (HDevEngineException Ex) { MessageBox.Show(Ex.Message, "HDevEngine Exception"); } } private void button3_Click(object sender, EventArgs e) { myTimer.Start(); } private void CreateTimer() { myTimer.Tick += new EventHandler(OnTimer); myTimer.Interval = 500; } int _index = 0; string[] _fileNames; HTuple ModelScore; private void OnTimer(object sender, EventArgs e) { myTimer.Stop(); if (_index == 0) { OpenFileDialog openDlg = new OpenFileDialog(); openDlg.Multiselect = true; if (openDlg.ShowDialog() == DialogResult.OK) { _fileNames = openDlg.FileNames; } } string fileName = _fileNames[_index]; HObject Image2; HOperatorSet.GenEmptyObj(out Image2); Image2.Dispose(); HOperatorSet.ReadImage(out Image2, fileName); try { ProcCall2.SetInputIconicParamObject("Image", Image2); ProcCall2.SetInputCtrlParamTuple("WindowHandle", Window); ProcCall2.SetInputCtrlParamTuple("ModelId", ModelId1); ProcCall2.Execute(); ModelScore = ProcCall2.GetOutputCtrlParamTuple("ModelScore"); } catch (HDevEngineException Ex) { MessageBox.Show(Ex.Message, "HDevEngine Exception"); return; } if (ModelScore.Length > 0) { label1.Text = "OK"; label1.ForeColor = Color.Green; } else { label1.Text = "NG"; label1.ForeColor = Color.Red; } _index++; if (_index >= _fileNames.GetLength(0)) { DialogResult dlgRes = MessageBox.Show("是否繼續檢測?", "詢問", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (dlgRes == DialogResult.No) { myTimer.Stop(); return; } _index = 0; } else myTimer.Start(); } } }