winfrom大恒工业相机SDK二次开发、C#联合halcon开发

一、开发环境

1.在大恒图像官网下载SDK安装包,安装SDK后,打开安装目录找到Samples文件夹,然后找到Samples\CSharp SDK\x64\DoNET\.NET4.0文件夹下找到GxIAPINET.dll,如图:

2.打开VS2019软件,建立winfrom项目,引用GxIAPINET.dll到项目,如下图:

3.将相机连接到PC的USB3.0接口

二、二次开发类

开发代码:相机连接类SvDaHengUSB3包含连接相机、关闭相机连接、修改相机配置和相机采集几个方法,代码如下:

using HalconDotNet;
using GxIAPINET;

 /// <summary>
    /// 大恒图像工业相机
    /// </summary>
    public class SvDaHengUSB3
    {     
        IGXFactory U3_IGXFactory = null;//<Factory对像   
        List<IGXDeviceInfo> U3_IGXDeviceInfo = new List<IGXDeviceInfo>();
        IGXDevice Cam = null;
        IGXStream Cam_Stream = null;  //<流对像
        IGXFeatureControl Cam_RemoteControl = null;    //<远端设备属性控制器对像  
        IGXFeatureControl Cam_Control = null;  //<流层属性控制器对象
        /// <summary>
        /// 连接相机
        /// </summary>
        public override void Initial()
        {
            base.Initial();        
            try
            {
                U3_IGXFactory = IGXFactory.GetInstance();
                U3_IGXFactory.Init();
                U3_IGXDeviceInfo.Clear();
                if (null != U3_IGXFactory)
                {
                    U3_IGXFactory.UpdateDeviceList(200, U3_IGXDeviceInfo);
                }                                       
                //通过SN打开设备
                //GX_ACCESS_CONTROL以控制的方式打开相机
                //GX_ACCESS_EXCLUSIVE以独占的方式发开相机
                //GX_ACCESS_READONLY以只读的方式打开相
                Cam = U3_IGXFactory.OpenDeviceBySN(SN, GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);
                //获取流通道个数
                uint stream_num = Cam.GetStreamCount();
                //打开设备的流
                Cam_Stream = Cam.OpenStream(0);
                //获取远端设备属性控制器
                Cam_RemoteControl = Cam.GetRemoteFeatureControl();
                //获取本地属性控制器
                Cam_Control = Cam.GetFeatureControl();
                关闭设备
                //Cam.Close();

                if (Cam == null)
                {
                    throw new Exception($"相機{SN}連接失敗");
                }
                //if (Colorful == "黑白")
                //{
                //    Cam_RemoteControl.GetEnumFeature("PixelFormat").SetValue("Mono8");//像素格式
                //    result = 1;
                //}
                //else
                //{
                //    Cam_RemoteControl.GetEnumFeature("PixelFormat").SetValue("BayerBG8");//像素格式
                //    Cam_RemoteControl.GetEnumFeature("BalanceWhiteAuto").SetValue("Off");//自动白平衡
                //    Cam_RemoteControl.GetEnumFeature("BalanceRatioSelector").SetValue("Red");//自动白平衡通道
                //    Cam_RemoteControl.GetEnumFeature("BalanceRatio").SetValue("2f");//白平衡系数
                //    Cam_RemoteControl.GetEnumFeature("BalanceRatioSelector").SetValue("Green");
                //    Cam_RemoteControl.GetEnumFeature("BalanceRatio").SetValue("1f");
                //    Cam_RemoteControl.GetEnumFeature("BalanceRatioSelector").SetValue("Blue");
                //    Cam_RemoteControl.GetEnumFeature("BalanceRatio").SetValue("2f");
                //    result = 1;
                //}

                //Cam_RemoteControl.GetEnumFeature("TriggerMode").SetValue("On");//触发模式
                //Cam_RemoteControl.GetEnumFeature("TriggerSource").SetValue("Software");//触发源
                //Cam_RemoteControl.GetEnumFeature("ExposureAuto").SetValue("Off");//自动曝光
                //Cam_RemoteControl.GetEnumFeature("GainAuto").SetValue("Off");//自动增益
                //Cam_RemoteControl.GetFloatFeature("ExposureTime").SetValue((float)Exposure);//曝光
                //Cam_RemoteControl.GetFloatFeature("Gain").SetValue((float)Gain);//增益                              

                //if (result <= 0)
                //{
                //    throw new Exception($"相機{SN}開啟失敗");
                //}

                Thread.Sleep(500);
                Snap();
            }
            catch (Exception ex)
            {
                SvMaster.Log.WriteError(ex);
            }
        }
        //关闭相机
        public override void Close()
        {          
            try
            {
                // 如果未停采则先停止采集
                if (null != Cam_RemoteControl)
                {
                    Cam_RemoteControl.GetCommandFeature("AcquisitionStop").Execute();
                    Cam_RemoteControl = null;
                }

                //停止流通道、注销采集回调和关闭流
                if (null != Cam_Stream)
                {
                    Cam_Stream.StopGrab();
                    //注销采集回调函数
                    Cam_Stream.UnregisterCaptureCallback();
                    Cam_Stream.Close();
                    Cam_Stream = null;
                    Cam_Control = null;
                }
                //关闭设备
                if (null != Cam)
                {
                    Cam.Close();
                    Cam = null;                   
                }
            }
            catch (Exception ex)
            {
                SvMaster.Log.WriteError(ex);
            }           
        }
        //修改相机配置
        public override void AdaptCamera()
        {
            try
            {
                Cam_RemoteControl.GetFloatFeature("ExposureTime").SetValue((float)Exposure);//曝光
                Cam_RemoteControl.GetFloatFeature("Gain").SetValue((float)Gain);//增益               
            }
            catch (Exception ex)
            {
                SvMaster.Log.WriteError(ex);
            }
        }      
        //相机采集
        public override HObject Snap()
        {
            HObject image = null;
            try
            {           
                //单采集
                Cam_Stream.StartGrab();
                Cam_RemoteControl.GetCommandFeature("AcquisitionStart").Execute();
                IImageData images = Cam_Stream.GetImage(1000);//超时ms               
                if (images.GetStatus() == GX_FRAME_STATUS_LIST.GX_FRAME_STATUS_SUCCESS)
                {
                    HOperatorSet.GenImage1(out image, "byte", images.GetWidth(), images.GetHeight(), images.GetBuffer());
                    image = BayerToRgb(image, "bayer_bg");
                    image = RotateImage(image);
                    //获取到完整帧图像进行图像处理
                    images.Destroy();
                }
                else
                {
                    Cam_RemoteControl.GetCommandFeature("AcquisitionStop").Execute();
                    Cam_RemoteControl = null;
                    Cam_Stream.StopGrab();
                    //注销采集回调函数
                    Cam_Stream.UnregisterCaptureCallback();
                    Cam_Stream.Close();
                    Cam_Stream = null;
                    Cam_Control = null;
                    Cam.Close();
                    Cam = null;
                    SvMaster.Log.WriteError($"相機{SN}取像超时,重新连接");
                }
            }
            catch (Exception ex)
            {
                SvMaster.Log.WriteError(ex);
            }          
            return image;
        }    
    }

说明:代码中SN、Exposure、Gain为外界设置的值

参考文献:WIN大恒工业相机SDK开发-CSDN博客

大恒相机sdk二次开发 _c#从0开始新建winform窗体实现相机基础采集功能_大恒相机康耐视开发实例-CSDN博客

相关推荐

  1. 相机SDK开发

    2023-12-19 10:16:04       22 阅读
  2. 【记录】海康相机SDK开发时的错误码

    2023-12-19 10:16:04       44 阅读
  3. 115.工业相机海康SDK开发指南(阅读)

    2023-12-19 10:16:04       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-19 10:16:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-19 10:16:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-19 10:16:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-19 10:16:04       20 阅读

热门阅读

  1. python爬虫---urllib

    2023-12-19 10:16:04       38 阅读
  2. Wireshark在云计算中的应用

    2023-12-19 10:16:04       30 阅读
  3. flutter学习-day14-事件处理和通知

    2023-12-19 10:16:04       32 阅读
  4. C# 获取Excel里引用的外部其他excel文件清单

    2023-12-19 10:16:04       34 阅读
  5. Latex编译出来的pdf文件缺少参考文献和交叉引用

    2023-12-19 10:16:04       29 阅读
  6. 1641:【例 1】矩阵 A×B

    2023-12-19 10:16:04       28 阅读
  7. MySQL

    2023-12-19 10:16:04       33 阅读
  8. 【算法集训】基础数据结构:十、矩阵

    2023-12-19 10:16:04       48 阅读
  9. 登录测试用例详解

    2023-12-19 10:16:04       46 阅读
  10. leetcode242. 有效的字母异位词

    2023-12-19 10:16:04       41 阅读