使用halcon提供的OpenFramegrabber方法访问各种工业相机

 

目前业内流行的相机除Basler相机以外都有提供给halcon更兼容的动态链接库,虽然说halcon自带的GigE接口能兼容一般GigE接口的相机但是对于较低版本的halcon来说导出来的外部程序可能无法打开相机,就比如我使用的halcon12版本的导出C#程序后出现无法打开相机切卡死的情况。

如果你的halcon版本较高,完全可以使用GigE接口。

如果你的halcon版本较低,可以使用以下步骤(以下举例海康相机的低版本halcon打开方式):

1、进入海康威视的安装目录

2、进入对应版本的halcon文件夹

使用halcon提供的OpenFramegrabber方法访问各种工业相机_第1张图片

3、复制hAcqMVision.dll到halcon安装目录下的 bin > x64-win64(对应电脑的操作系统)

使用halcon提供的OpenFramegrabber方法访问各种工业相机_第2张图片

使用halcon提供的OpenFramegrabber方法访问各种工业相机_第3张图片

4、找到 MVision 接口,连接相机可行后导出代码即可

使用halcon提供的OpenFramegrabber方法访问各种工业相机_第4张图片

 

以下演示一个C#+Halcon访问相机的Demo:

窗口设计:

使用halcon提供的OpenFramegrabber方法访问各种工业相机_第5张图片

 

代码:

public partial class Form1 : Form
    {
        //相机句柄
        HTuple hv_AcqHandle = null;
        //halcon窗口句柄
        HTuple handle;
        //单采集的图像
        HObject image = null;
        //抓取图像的线程
        Thread brabT;
        //线程开关
        bool isRun = true;
        public Form1()
        {
            InitializeComponent();

            handle = hWindowControl1.HalconWindow;
        }

        #region but事件相关
        //打开相机
        private void button1_Click(object sender, EventArgs e)
        {
            openCam();
            if (hv_AcqHandle == null)
            {
                return;
            }
            brabT = new Thread(brabImage);
            //开启线程并挂起它
            brabT.Start();
            brabT.Suspend();
        }
        //开始采集
        private void button2_Click(object sender, EventArgs e)
        {
            if (brabT != null)
            {
                //继续执行线程
                brabT.Resume();
            }

        }
        //停止采集
        private void button3_Click(object sender, EventArgs e)
        {
            if (brabT != null)
            {
                //暂停线程
                brabT.Suspend();
            }
        }
        //单采集
        private void button4_Click(object sender, EventArgs e)
        {
            HOperatorSet.GrabImage(out image, hv_AcqHandle);
            HOperatorSet.DispImage(image, handle);
        }

        //当窗口关闭时
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (brabT != null)
            {
                isRun = false;
                //brabT.Join();
                //继续执行线程
                //brabT.Resume();
                终止多余线程
                brabT.Abort();
            }
        }
        #endregion

        #region 相机相关
        //抓取图片线程
        private void brabImage()
        {
            HTuple w, h;
            HObject ho_Image;
            while (isRun)
            {
                try
                {
                    HOperatorSet.GrabImage(out ho_Image, hv_AcqHandle);
                    if (ho_Image != null)
                    {
                        HOperatorSet.GetImageSize(ho_Image, out w, out h);
                        HOperatorSet.SetPart(handle, 0, 0, h, w);
                        HOperatorSet.DispImage(ho_Image, handle);
                        //显示玩之后释放图片
                        ho_Image.Dispose();
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("相机已断开,请重新连接!");
                    Thread.Sleep(3000);
                    openCam();
                }

            }
        }
        private void openCam() {
            //释放相机句柄
            HOperatorSet.CloseAllFramegrabbers();

            try
            {
                //连接相机
                HOperatorSet.OpenFramegrabber("MVision", 1, 1, 0, 0, 0, 0, "progressive", 8,
                "default", -1, "false", "auto", "GEV:00D23303857", 0, -1, out hv_AcqHandle);
                MessageBox.Show("相机连接成功!");
            }
            catch (Exception)
            {

                MessageBox.Show("相机连接失败!");
            }
        }
        #endregion
    }

 

你可能感兴趣的:(相机的连接,使用halcon访问相机)