1. 程式人生 > >Halcon 與C# 聯合程式設計

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方法。