vs聯合halcon——采集圖像(實時采集與單次采集)


摘要

在對vs進行環境配置好以后,就可以開始與halcon聯合進行實戰。本篇就對圖像的采集進行總結。通過構建采集相機GrabImage類的三個方法實現圖像的采集:

  • open() 打開相機
  •  grabimage() 單次采集圖像
  • close() 關閉相機,釋放內存

最后用IrisSkin4實現WinForm窗體換皮膚。


 先看一下實現的效果:

 🧡🧡🧡🧡🧡如何實現呢?


 一,創建vs工程,創建 GrabImage類(便於調用)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HalconDotNet;

namespace 采集圖像
{
   public class GrabImage
    {
        HTuple hv_AcqHandle; //打開相機窗口的引用句柄
        HObject ho_Image;//定義圖片變量
        HTuple imageWidth, imageHeight;//定義寬高

        public void open()
        {
            try
            {
                                 
                HOperatorSet.GenEmptyObj(out ho_Image);// 初始化本地圖像空間的變量
                //打開本地相機
                HOperatorSet.OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb",
                    -1, "false", "default", "[0] Integrated Camera", 0, -1, out hv_AcqHandle);
                //開始采集圖像
                HOperatorSet.GrabImageStart(hv_AcqHandle, -1);
            }
            catch (Exception)
            {

                System.Windows.Forms.MessageBox.Show("打開相機失敗!");//報錯
            }
         
        }
        //構造單次采集圖像方法
        public void grabimage(HWindowControl HW)
        {
          
            //清空窗體halconwindows
            HW.HalconWindow.ClearWindow();
            //采集圖像
            HOperatorSet.GrabImageAsync(out ho_Image, hv_AcqHandle, -1);
            //轉成黑白圖像
            HOperatorSet.Rgb1ToGray(ho_Image, out ho_Image);
            //圖片自適應窗口
            HOperatorSet.GetImageSize(ho_Image, out imageWidth, out imageHeight);
            HOperatorSet.SetPart(HW.HalconWindow, 0, 0, imageHeight - 1, imageWidth - 1);
            //顯示圖像
            HOperatorSet.DispObj(ho_Image, HW.HalconWindow);
            //以當前日期保存圖像到D盤下
            //HOperatorSet.WriteImage(ho_Image, "png", 0, "D:\\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss"));
            ho_Image.Dispose();

        }
        //關閉相機,釋放內存
        public void close()
        {
            ho_Image.Dispose();
            HOperatorSet.CloseFramegrabber(hv_AcqHandle);


        }
    }
}

 二,編寫winform界面



 三,編寫主窗體Form1程序


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 采集圖像
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }
        GrabImage grabimg = new GrabImage();//實例化GrabImage類

        private void Form1_Load(object sender, EventArgs e)
        {
            skinEngine1.SkinFile = System.Environment.CurrentDirectory+ "\\Skins\\Calmness.ssk";
            skinEngine1.DisableTag = 8888;//設置不自動換膚。tag的值8888(默認9999)
            grabimg.open();//調用open方法
        }

        private void button1_Click(object sender, EventArgs e)
        {
            grabimg.grabimage(hWindowControl1);
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            grabimg.close();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            grabimg.grabimage(hWindowControl2);

        }
        //實時采集
        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }
        //停止采集
        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }
    }
}

這里利用了一個timer控件將單次采集變成實時采集(累加計時)。

💜💜💜💜💜那么如何修改winform界面皮膚呢?

  1. 下載IrisSkin4.dll以及皮膚包
  2. 解壓。將IrisSkin4.dll與Skins(皮膚)一起拷貝到項目的\bin\Debug文件夾下
  3. 在程序的資源管理器中的【引用】上單擊右鍵,選擇【添加引用】,找到剛才復制過來的IrisSkin4.dll文件,點擊【確定】
  4. 點擊菜單欄中的【工具】——>【選擇工具箱項——>【.NET Framework組件】——>【瀏覽】——>找到IrisSkin4.dll——>點擊【確定】,SkinEngine控件加入到工具箱 把控件添加進程序的主窗體(最簡單的方法就是直接把IrisSkin4.dll文件用鼠標拖動到【瀏覽】界面即可)
  5. 在主窗體的構造函數中編輯一行代碼選擇皮膚,即可完成渲染。
skinEngine1.SkinFile = System.Environment.CurrentDirectory+ "\\Skins\\Calmness.ssk";

 如果有需要IrisSkin4.dll以及皮膚包,可在下方評論留言。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM