Halcon 與C# 聯合程式設計
Halcon用於開發影象處理程式時,通常需要使用其他軟體編寫圖形化介面,Halcon提供了5種匯出模板:C-Halcon/C、C++-Halcon/C++、C++-Halcon/C++(Halcon-10-legacy)、VB.NET- Halcon/.NET、C#- Halcon/.NET。
本文使用Halcon 12與Visual Studio 2017,建立基於.NET Framework 4.6.1(可以根據需要調整)的C# Windows視窗應用程式,呼叫匯出的Halcon程式顯示圖片。
Halcon源程式:
*讀取圖片 read_image (Image, 'D:/Program Files/MVTec/HALCON-12.0/examples/images/cap_illumination/cap_illumination_05.png') *顯示影象 dev_display (Image)
建立好halcon程式後,在選單欄找到“檔案”選項下的“匯出”按鈕。
點選彈出如圖所示對話方塊,選擇程式匯出位置以及匯出語言。匯出範圍選擇“程式”,“外部函式”選項用於匯出建立的本地函式以及外部函式。
視窗匯出,選擇使用“匯出模板”,如果選擇“使用HALCON視窗”,則在程式執行時會自動建立一個Halcon的彈出視窗用於顯示影象。
匯出的C#程式:
// 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; //引用halcon的.NET模組 using HalconDotNet; //建立HDevelopExport類 public partial class HDevelopExport { public HTuple hv_ExpDefaultWinHandle; //定義私有的方法 // Main procedure private void action() { // Local iconic variables HObject ho_Image; // Initialize local and output iconic variables HOperatorSet.GenEmptyObj(out ho_Image); ho_Image.Dispose(); HOperatorSet.ReadImage(out ho_Image, "D:/Program Files/MVTec/HALCON-12.0/examples/images/cap_illumination/cap_illumination_05.png"); HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle); ho_Image.Dispose(); } //初始化視窗函式 public void InitHalcon() { // Default settings used in HDevelop HOperatorSet.SetSystem("width", 512); HOperatorSet.SetSystem("height", 512); } //建立公有方法RunHalcon(HTuple Window)呼叫私有方法action(),HTuple Window為用於顯示影象的halcon視窗控制代碼 public void RunHalcon(HTuple Window) { hv_ExpDefaultWinHandle = Window; action(); } }
下一步,使用Visual Studio 2017建立Windows視窗應用程式。
新增引用,找到X:\...\MVTec\HALCON-12.0\bin\dotnet3資料夾下的動態連線庫檔案:halcondotnet.dll。
然後新增Halcon視窗控制元件,在工具箱選項卡中,右鍵點選“選擇項”,彈出如下圖所示視窗,點選瀏覽,找到X:\...\MVTec\HALCON-12.0\bin\dotnet3資料夾下的動態連線庫檔案:halcondotnet.dll,然後選中HWindowControl組建。
在工具箱中選擇HWindowControl組建,建立halcon視窗,新增button按鈕,如下圖所示。
下面只需要在button按鍵單擊事件中新增呼叫halcon匯出程式,便可以實現顯示影象的方法。
C#程式:
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 h_show_img
{
public partial class Form1 : Form
{
HDevelopExport HDevelop=new HDevelopExport(); //新增HDevelopExport類並例項化
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
HDevelop.RunHalcon(hWindowControl1.HalconWindow); //引用RunHalcon方法顯示影象,hWindowControl1.HalconWindow為建立的halcon視窗控制代碼。
}
}
}
執行效果如下:
注意:
1.活動解決方案平臺應該與安裝的halcon相對應,如本文使用的是64位的halcon,應在配置管理器中將平臺目標改為x64。
2.如果想讓影象適應視窗,應該在halcon中新增dev_set_part方法。