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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/258565.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JS中的异常处理:

throw: 抛出异常时我们哪个关键字&#xff1f;它会终止程序&#xff1f; throw关键字 会终止程序 抛出异常经常和谁配合使用&#xff1f; Error对象配合throw使用 代码演示&#xff1a; function fn(x,y){if(!x || !y){// console.log(11);// throw 用户没有参数传递进来;th…

【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022

前言 本文分享BEV感知方案中&#xff0c;具有代表性的方法&#xff1a;BEVFormer。 它基于Deformable Attention&#xff0c;实现了一种融合多视角相机空间特征和时序特征的端到端框架&#xff0c;适用于多种自动驾驶感知任务。 主要由3个关键模块组成&#xff1a; BEV Que…

EasyExcel合并相同内容单元格及动态标题功能的实现

一、最初版本 导出的结果&#xff1a; 对应实体类代码&#xff1a; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentLoopMerge; import com.al…

markdown文档主题颜色修改

目录 1、选择任意想选择的markdown文档主题css文件&#xff1a; 2、修改背景颜色 1、选择任意想选择的markdown文档主题css文件&#xff1a; 使用工具Typora文件主题路径&#xff1a; C:\Users\AppData\Roaming\Typora\themes&#xff0c;此处我这边就是copy了xydark的css文…

Java 自定义注解

Java 自定义注解&#xff0c; 以及interface Target Retention Around Before After ProceedingJoinPoint JoinPoint 等用法 注解应用非常广泛&#xff0c;我们自定义注解能简化开发各种各种业务 一、关键字解释 (1) 定义注解时&#xff0c;关键字 interface 来表示注解类的类…

高级算法设计与分析(二) -- 递归与分治策略

系列文章目录 高级算法设计与分析&#xff08;一&#xff09; -- 算法引论 高级算法设计与分析&#xff08;二&#xff09; -- 递归与分治策略 高级算法设计与分析&#xff08;三&#xff09; -- 动态规划 未完待续【 高级算法设计与分析&#xff08;四&#xff09; -- 贪…

谷歌新款 Pixel 8 更小、更智能!

一、谷歌 Pixel 8 更小、更智能——比去年的 Pixel 7 贵了 100 美元——不是一点点——贵 与 Pixel 7 一样&#xff0c;Pixel同样在今天 8 比正式发布的更大的 Pixel 8 Pro 兄弟产品更小、更便宜。但今年价格有所上涨&#xff0c;128GB 存储型号的 Pixel 8 起售价为 699.99 美…

腾讯云消息队列11月产品月报 | RocketMQ 5.x 国际站上线

2023年 11月动态 消息队列 RocketMQ 版 1、5.x 形态国际站上线 国际站上线 5.x 集群全系列&#xff0c;第一批先开放新加坡和硅谷地域。 控制台链接&#xff1a;https://console.tencentcloud.com/trocketmq 2、 无感迁移能力 支持用户白屏化操作&#xff0c;将自建的 Roc…

夜莺项目发布 v6.5.0 版本,暗黑菜单来了

大家好&#xff0c;夜莺项目发布 v6.5.0 版本&#xff0c;启用新 logo&#xff0c;菜单支持换肤&#xff0c;支持了暗黑版本的菜单&#xff0c;下一步会支持全站暗黑主题&#xff0c;敬请期待&#xff0c;下面是新 logo。 暗黑菜单 页面右上角点击用户名&#xff0c;在下拉框里…

盘点ASO优化过去到现在的进步

ASO优化行业十年老兵报道&#xff01;从以下几个方面总结了ASO优化的一些变化和进步&#xff0c;给大家分享。 一、优化手段&#xff1a; 过去&#xff0c;ASO优化主要依赖于机刷&#xff0c;通过破解苹果的算法&#xff0c;对苹果账号进行一系列的定向操作行为&#xff08;搜…

React Jsx转换成真实DOM过程?

面试官&#xff1a;说说React Jsx转换成真实DOM过程&#xff1f; 一、是什么 react通过将组件编写的JSX映射到屏幕&#xff0c;以及组件中的状态发生了变化之后 React会将这些「变化」更新到屏幕上 在前面文章了解中&#xff0c;JSX通过babel最终转化成React.createElement这…

双碳背景下能耗在线监测系统硬件选型详述

Acrel-5000web建筑能耗分析系统是用户端能源管理分析系统&#xff0c;在电能管理系统的基础上增加了对水、气、煤、油、热(冷)量等集中采集与分析&#xff0c;通过对用户端所有能耗进行细分和统计&#xff0c;以直观的数据和图表向管理人员或决策层展示各类能源的使用消耗情况&…

SpringBoot访问外部接口的常见方式

文章目录 SpringBoot访问外部接口模拟服务接口RestTemplatepom.xmlRestTemplateConfigClientTestRestTemplateController.java结果 WebClientpom.xmlClientTestWebClientController.java结果 HttpClientpom.xmlClientTestHttpClientController.java结果 OkHttppom.xmlClientTes…

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见&#xff1a;Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode)&#xff1a;一名选手只要输掉一场球&#xff0c;就被淘汰。一对一对…

【Linux 驱动】Linux设备树(四)—— 设备树驱动LED

有了设备树以后&#xff0c;我们可以将寄存器信息保存到设备树&#xff0c;即便是更换了一个设备&#xff0c;我们也无需修改驱动文件&#xff0c;只需要修改设备树文件并重新编译。 下面介绍两种通过设备树驱动 LED 的最简单的方式&#xff0c;这两种方式的主要是设备树中 re…

自营商城与多商户入驻商城功能与开发流程_OctShop

如今互联网以及电子商务的大趋势下&#xff0c;很多企业或商家都意识到自营商城的重要性。当然&#xff0c;要搭建一个属于自己的自营商城并非简单。需要综合考虑众多的因素&#xff0c;如&#xff1a;用户体验、商品管理、在线支付、功能需求、市场分析等等多个方面。如果是自…

dell服务器 R740xd安装windows server 2019过程记录

公司有两台dell服务器型号是R740xd&#xff0c;增加了存储&#xff0c;更新系统到windows server 2019标准版。 查找了网上的系统安装方式&#xff0c;都没有实践成功&#xff0c;做一下工作记录&#xff0c;给大家做参考。 网络搜索到的两种方式&#xff0c;进行安装 &#x…

全都没有问题(二点五)

java 接口默认方法冲突等问题 基础基础基础 子接口覆盖父接口的默认方法 package com.book;interface AA{public abstract void print();public default void ID(){System.out.println("AA");} } interface BB extends AA{ //接口BB继承AAOverridepublic default…

C#线程的定义和使用方法

引言 在C#编程语言中&#xff0c;线程是一种并发执行的机制&#xff0c;允许程序同时执行多个任务。线程的使用使得我们能够利用计算机的多核处理器&#xff0c;实现程序的并行执行&#xff0c;提高系统的性能和响应能力。本文将详细介绍C#中线程的定义和使用方法&#xff0c;涵…

学习体系结构 - AArch64 虚拟化

学习体系结构 - AArch64 虚拟化 Learn the architecture - AArch64 virtualization Version 1.0 借助 Deepl 翻译文档 个人对文档补充的一部分解释&#xff0c; 仅供学习参考 前 3 章为了解内容&#xff0c;引入虚拟化 第 4-7 章为虚拟化比较核心的内容 第 4 章为第二阶段地址…