1. 程式人生 > >Halcon學習筆記(2) VS2010 + Halcon12 C#鏈接相機

Halcon學習筆記(2) VS2010 + Halcon12 C#鏈接相機

operator debug ets generic code locate != 目錄 empty

1.打開Halcon, 使用圖像采集助手獲取相機實時圖像:

  技術分享

  1.1 獲取實時圖像:

      技術分享

  1.2 插入采集實時圖像的Halcon代碼,並導出:

    技術分享

    技術分享

    Image_acq.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=null; // Local control variables HTuple hv_AcqHandle = null; // Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image); //Image Acquisition 01: Code generated by Image Acquisition 01 HOperatorSet.OpenFramegrabber("GigEVision", 0, 0, 0, 0, 0, 0, "default", -1, "default", -1, "false", "default", "e0508b2e4c36_DahuaTechnology_A5201MG50", 0, -1, out hv_AcqHandle); HOperatorSet.GrabImageStart(hv_AcqHandle,
-1); while ((int)(1) != 0) { ho_Image.Dispose(); HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1); //Image Acquisition 01: Do something } HOperatorSet.CloseFramegrabber(hv_AcqHandle); ho_Image.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(); } }

2. 在c#項目中畫好對應的按鈕:

  技術分享

  對采集/停止按鈕 執行方法進行編程(註意頭部添加using HalconDotNet; 用到線程還要添加:using System.Threading;):

  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;

using System.Threading;

namespace demo4
{
    public partial class Form1 : Form
    {
        HObject ho_Image = null;
        HTuple hv_AcqHandle = null;

        public Form1()
        {
            InitializeComponent();
        }

        Thread dispig;

        //采集
        private void button1_Click(object sender, EventArgs e)
        {
            dispig = new Thread(showFrame);
            dispig.Start();
        }
        //停止
        private void button2_Click(object sender, EventArgs e)
        {
            dispig.Abort();
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);
        }

        void showFrame()
        {
            // Initialize local and output iconic variables 
            HOperatorSet.GenEmptyObj(out ho_Image);
            //Image Acquisition 01: Code generated by Image Acquisition 01
            HOperatorSet.OpenFramegrabber("GigEVision", 0, 0, 0, 0, 0, 0, "default", -1,
                "default", -1, "false", "default", "e0508b2e4c36_DahuaTechnology_A5201MG50",
                0, -1, out hv_AcqHandle);
            HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
            while ((int)(1) != 0)
            {
                ho_Image.Dispose();
                HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
                //Image Acquisition 01: Do something
                HOperatorSet.DispObj(ho_Image, hWindowControl1.HalconWindow);
            }
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);
            ho_Image.Dispose();
        }
    }
}

  在Debug文件下添加“halcon.dll”文件,把目標平臺改成“Any CPU”之後執行,結果還是出錯:

  技術分享

  該錯誤是因為Debug目錄下沒有Halcon加載相機的相關dll導致,為了方便,我們將“HALCON-12.0\bin\x64-win64”目錄下的所有dll拷貝到Debug文件下,然後再次執行采集按鈕:

  

  技術分享

  按停止後圖像不采集。

  大功告成!

後續:

  上面圖像並沒有完全顯示,而是受到隨意拉動HWindowControl空間後縮放的影響,我們註意HWindowControl的如下兩個屬性(紅圈):

技術分享

  其中兩個值已經是我改過來的,因為我使用的相機是1920*1200的。 ImagePart表示采集相機圖像的尺寸,Size屬性表示空間HWindowControl的尺寸,把Size的長寬比與采集的圖像長寬比保持一致即可:

  技術分享

  大功告成!

  

  

  

Halcon學習筆記(2) VS2010 + Halcon12 C#鏈接相機