Vpro 相机操作类

news/2024/10/22 18:33:16/

在网站上看到这个,保存下来,以后用到了,再看一下。谢谢原创的分享!

#region 获得相机信息方法

/// <summary>
/// 公有静态方法,查找单个相机。例如“Basler”
/// </summary>
public  static  ICogFrameGrabber FindFrameGrabber( string  CameraType)
{
     CogFrameGrabberGigEs frameGrabbers =  new  CogFrameGrabberGigEs();
     foreach  (ICogFrameGrabber fg  in  frameGrabbers)
     {
         if  (fg.Name.Contains(CameraType))
         {
             return  (fg);
         }
     }
     return  null ;
}
/// <summary>
/// 公有静态方法,查找相机列表。
/// </summary>
public  static  void  FindFrameGrabber(List<ICogFrameGrabber> List)
{
     CogFrameGrabberGigEs frameGrabbers =  new  CogFrameGrabberGigEs();
     foreach  (ICogFrameGrabber fg  in  frameGrabbers)
     {
         if  (fg.Name.Contains( "Basler" ))
         {
             List.Add(fg);
         }
     }
}
/// <summary>
/// 公有静态方法,创建相机初始化工具获取信息。
/// </summary>
public  static  ICogAcqFifo GetCogAcqFifo( int  index)
{
     List<ICogFrameGrabber> list =  new  List<ICogFrameGrabber>();
     FindFrameGrabber(list);
     ICogFrameGrabber frameGrabbers = list[index];
     ICogAcqFifo mCogAcqFifo =  null ; ;
     if  (frameGrabbers ==  null )
     {
         mCogAcqFifo =  null ;
         return  mCogAcqFifo;
     }
     if  (frameGrabbers.Name.Contains( "gm" ))
     {
         mCogAcqFifo = frameGrabbers.CreateAcqFifo( "Generic GigEVision (Mono)" , CogAcqFifoPixelFormatConstants.Format8Grey, 0,  false );
     }
     else  if  (frameGrabbers.Name.Contains( "gc" ))
     {
         mCogAcqFifo = frameGrabbers.CreateAcqFifo( "Generic GigEVision (Bayer Color)" , CogAcqFifoPixelFormatConstants.Format32RGB, 0,  false );
     }
     return  mCogAcqFifo;
}
/// <summary>
/// 公有静态方法,查找相机数量。
/// </summary>
public  static  int  GetAllCCDCount()
{
     CogFrameGrabberGigEs frameGrabbers =  new  CogFrameGrabberGigEs();
     int  count = frameGrabbers.Count;
     return  count;
}
/// <summary>
/// 公有静态方法,获得CCD曝光exposure。
/// </summary>
public  static  double  GetCurCCDExposure(ICogAcqFifo acqFifo)
{
     ICogAcqExposure exposureParams = acqFifo.OwnedExposureParams;
     double  exposure;
     if  (exposureParams ==  null )
     {
         exposure = 0;
     }
     else
     {
         exposure = exposureParams.Exposure;
     }
     return  exposure;
}
/// <summary>
/// 公有静态方法,获得CCD亮度light。
/// </summary>
public  static  double  GetCurCCDLight(ICogAcqFifo acqFifo)
{
     ICogAcqLight lightParams = acqFifo.OwnedLightParams;
     double  light;
     if  (lightParams ==  null )
     {
         light = 0;
     }
     else
     {
         light = lightParams.LightPower;
     }
     return  light;
}
/// <summary>
/// 公有静态方法,获得CCD对比度Contrast。
/// </summary>
public  static  double  GetCurCCDContrast(ICogAcqFifo acqFifo)
{
     ICogAcqContrast ContrastParams = acqFifo.OwnedContrastParams;
     double  Contrast;
     if  (ContrastParams ==  null )
     {
         Contrast = 0;
     }
     else
     {
         Contrast = ContrastParams.Contrast;
     }
     return  Contrast;
}
/// <summary>
/// 公有静态方法,获得CCD序列号SN
/// </summary>
public  static  string  GetCurCCDSN(ICogAcqFifo acqFifo)
{
     string  SerialNumber;
     if  (acqFifo ==  null )
     {
         SerialNumber =  "" ;
     }
     else
     {
         SerialNumber = acqFifo.FrameGrabber.SerialNumber;
     }
     return  SerialNumber;
}
/// <summary>
/// 公有静态方法,获得CCD名称Name
/// </summary>
public  static  string  GetCurCCDName(ICogAcqFifo acqFifo)
{
     string  CCDName;
     if  (acqFifo ==  null )
     {
         CCDName =  "" ;
     }
     else
     {
         CCDName = acqFifo.FrameGrabber.Name;
     }
     return  CCDName;
}
/// <summary>
/// 公有静态方法,获得CCD名称IP
/// </summary>
public  static  string  GetCurCCDIP(ICogAcqFifo acqFifo)
{
     string  IP;
     if  (acqFifo ==  null )
     {
         IP =  "0.0.0.0" ;
     }
     else
     {
         IP = acqFifo.FrameGrabber.OwnedGigEAccess.CurrentIPAddress;
     }
     return  IP;
}
/// <summary>
/// 公有静态方法,获得CCD名称HostIP
/// </summary>
public  static  string  GetCurCCDHostIP(ICogAcqFifo acqFifo)
{
     string  HostIP;
     if  (acqFifo ==  null )
     {
         HostIP =  "0.0.0.0" ;
     }
     else
     {
         HostIP = acqFifo.FrameGrabber.OwnedGigEAccess.HostIPAddress;
     }
     return  HostIP;
}
/// <summary>
/// 公有静态方法,获得CCD信号反跳转时间参数。
/// </summary>
public  static  double  GetCurCCDLineDebouncerTime(ICogGigEAccess gigEAccess)
{
     double  LineDebouncerTimeAbs = 0;
     try
     {
         LineDebouncerTimeAbs = gigEAccess.GetDoubleFeature( "LineDebouncerTimeAbs" );
         return  LineDebouncerTimeAbs;
     }
     catch  { }
     return  LineDebouncerTimeAbs;
}
/// <summary>
/// 公有静态方法,获得CCD帧率参数。
/// </summary>
public  static  double  GetCurCCDAcquisitionLineRate(ICogGigEAccess gigEAccess)
{
     double  AcquisitionLineRateAbs = 0;
     try
     {
         AcquisitionLineRateAbs = gigEAccess.GetDoubleFeature( "AcquisitionLineRateAbs" );
         return  AcquisitionLineRateAbs;
     }
     catch  { }
     return  AcquisitionLineRateAbs;
}
#endregion 获得相机信息方法
#region 设置相机参数方法
/// <summary>
/// 公有静态方法,设置CCD曝光exposure
/// </summary>
public  static  void  ConfigureExposure(ICogAcqFifo acqFifo,  double  exposure)
{
     ICogAcqExposure exposureParams = acqFifo.OwnedExposureParams;
     if  (exposureParams !=  null )
     {
         exposureParams.Exposure = exposure;
         acqFifo.Prepare();
     }
}
/// <summary>
/// 公有静态方法,设置CCD亮度light。
/// </summary>
public  static  void  ConfigureLight(ICogAcqFifo acqFifo,  double  light)
{
     ICogAcqLight lightParams = acqFifo.OwnedLightParams;
     if  (lightParams !=  null )
     {
         if  (light > 1 || light < 0)
         {
             System.Windows.Forms.MessageBox.Show( "参数需要在0-1区间!" "提示" );
         }
         else
         {
             lightParams.LightPower = light;
             acqFifo.Prepare();
         }
     }
}
/// <summary>
/// 公有静态方法,设置CCD对比度Contrast。
/// </summary>
public  static  void  ConfigureContrast(ICogAcqFifo acqFifo,  double  Contrast)
{
     ICogAcqContrast ContrastParams = acqFifo.OwnedContrastParams;
     if  (ContrastParams !=  null )
     {
         if  (Contrast > 1 || Contrast < 0)
         {
             System.Windows.Forms.MessageBox.Show( "参数需要在0-1区间!" "提示" );
         }
         else
         {
             ContrastParams.Contrast = Contrast;
             acqFifo.Prepare();
         }
     }
}
/// <summary>
/// 公有静态方法,设置CCD外触发参数。
/// </summary>
public  static  void  ConfigureTrigger(ICogGigEAccess gigEAccess,  double  lineDebouncerTime,  double  AcquisitionLineRateAbs)
{
     //gigEAccess.SetFeature("TriggerSelector", "LineStart");
     //gigEAccess.SetFeature("TriggerMode", "Off");
     gigEAccess.SetFeature( "TriggerSelector" "FrameStart" ); //帧
     gigEAccess.SetFeature( "TriggerMode" "On" );
     gigEAccess.SetFeature( "TriggerSource" "Line3" );
     // gigEAccess.SetFeature("TriggerActivation", "RisingEdge");
     // 或者可以触发激活到fallingedge。
     gigEAccess.SetFeature( "TriggerActivation" "FallingEdge" );
     //gigEAccess.SetFeature("LineSelector", "Line3");
     gigEAccess.SetFeature( "LineTermination" "false" );
     gigEAccess.SetDoubleFeature( "LineDebouncerTimeAbs" , lineDebouncerTime);
     gigEAccess.SetDoubleFeature( "AcquisitionLineRateAbs" , AcquisitionLineRateAbs);
}
public  static  void  SetlineDebouncerTime(ICogGigEAccess gigEAccess,  double  time)
{
     gigEAccess.SetFeature( "TriggerSelector" "FrameStart" ); //帧
     gigEAccess.SetFeature( "TriggerSource" "Line1" );
     gigEAccess.SetFeature( "TriggerActivation" "FallingEdge" );
     //gigEAccess.SetFeature("TriggerActivation", "RisingEdge");
     gigEAccess.SetFeature( "LineSelector" "Line1" );
     //gigEAccess.SetFeature("LineTermination", "false");
     gigEAccess.SetDoubleFeature( "LineDebouncerTimeAbs" , time);
}
/// <summary>
/// 公有静态方法,设置CCD旋转编码器触发。
/// </summary>
public  static  void  ConfigureEncoder(ICogGigEAccess gigEAccess)
{
     gigEAccess.SetFeature( "ShaftEncoderModuleLineSelector" "PhaseA" );
     gigEAccess.SetFeature( "ShaftEncoderModuleLineSource" "Line2" );
     gigEAccess.SetFeature( "ShaftEncoderModuleLineSelector" "PhaseB" );
     gigEAccess.SetFeature( "ShaftEncoderModuleLineSource" "Line3" );
     // Enable line termination for the RS-422 encoder signals
     gigEAccess.SetFeature( "LineSelector" "Line2" );
     gigEAccess.SetFeature( "LineTermination" "true" );
     gigEAccess.SetFeature( "LineSelector" "Line3" );
     gigEAccess.SetFeature( "LineTermination" "true" );
     // Set the shaft encoder module counter mode
     gigEAccess.SetFeature( "ShaftEncoderModuleCounterMode" "IgnoreDirection" );
     gigEAccess.SetFeature( "TriggerSelector" "LineStart" );
     gigEAccess.SetFeature( "TriggerMode" "On" );
     gigEAccess.SetFeature( "TriggerSource" "ShaftEncoderModuleOut" );
     gigEAccess.SetFeature( "TriggerActivation" "FallingEdge" );
     //gigEAccess.SetFeature("TriggerActivation", "RisingEdge");
}
public  static  void  ConfigureAcquisitionLineRateAbs(ICogGigEAccess gigEAccess,  double  _AcquisitionLineRateAbs)
{
     gigEAccess.SetDoubleFeature( "AcquisitionLineRateAbs" , _AcquisitionLineRateAbs);
}
public  static  void  ConfigurelineDebouncerTime(ICogGigEAccess gigEAccess,  double  _lineDebouncerTime)
{
     gigEAccess.SetDoubleFeature( "LineDebouncerTimeAbs" , _lineDebouncerTime);
}
/// <summary>
/// 公有静态方法,设置位宽。
/// </summary>
public  static  void  SetBandwidth(ICogGigEAccess gigEAccess,
     double  percentageOfBandwidth)
{
     Double maxRate = 100 * 1024 * 1024;
     uint  packetSize = gigEAccess.GetIntegerFeature( "GevSCPSPacketSize" );
     Double packetTime = packetSize / maxRate;
     Double desiredTime = packetTime / percentageOfBandwidth;
     Double delaySec = desiredTime - packetTime;
     ulong  timeStampFreq = gigEAccess.TimeStampFrequency;
     uint  delay = ( uint )(delaySec * timeStampFreq);
     gigEAccess.SetIntegerFeature( "GevSCPD" , delay);
}
#endregion 设置相机参数方法
/// <summary>
/// 公有静态方法,保存用户设置参数。
/// </summary>
public  static  void  SaveUserSet(ICogGigEAccess gigEAccess)
{
     gigEAccess.SetFeature( "UserSetSelector" "UserSet1" );
     gigEAccess.ExecuteCommand( "UserSetSave" );
     gigEAccess.SetFeature( "UserSetDefaultSelector" "UserSet1" );
}

本文转载自  https://www.cnblogs.com/MachineVision/p/5775101.html


http://www.ppmy.cn/news/429757.html

相关文章

盘点国产RISC-V内核的单片机

RISC-V就不必多说了&#xff0c;它是一个基于精简指令集的开源指令集架构。与主流的主流的架构为x86与ARM架构不同&#xff0c;其特点就是完全开源。今天跟大家一起盘点一下国产RISC-V内核的单片机。 1.GD32VF103系列 兆易创新作为国产MCU比较大的一个厂家&#xff0c;其早就推…

RISC-V与主流处理器设计

RISC-V与主流处理器设计 文章目录 RISC-V与主流处理器设计前言 一、RISC-V最基本的ISA1.什么是RISC-V2.RISC-V的发展目标3.RISC-V的ISA设计4.RV32I&#xff1a;RISC-V 基础整数指令集4.1RV32I 指令格式4.2RV32I 寄存器4.3RV32I 整数计算4.4RV32I 的Load 和 Store4.5RV32I 条件分…

VisionPro软件介绍

V i s i o n P r o 软 件 介 绍 VisionPro软件介绍 VisionPro软件介绍 一 VisionPro的四种开发模式 1.Quickbuild视觉向导生成的操作界面 Quickbuild视觉 向导生成的操作界面 2 Quickbuild视觉修改的操作界面 使用QuickBuild互动开发视觉、输入和输出和工作控件使用应用…

12代酷睿不再“挤牙膏”,能为英特尔vPro远程办公带来什么?

文/智能相对论 作者/隐南 第12代酷睿Alder Lake终于要发售了。 被消费者贴上“牙膏厂”标签多年的英特尔这次终于觉醒&#xff0c;在架构上做出了重大改变&#xff0c;性能上也有大幅的提升。 对于15年来依托酷睿成长起来的商用办公平台vPro&#xff0c;12代酷睿的升级能为…

【Red Hat7.9安装Oracle11g--调用图形化界面的几种方式】

【Red Hat7.9安装Oracle11g--调用图形化界面的几种方式】 &#x1f53b; 一、续上一篇[【Red Hat 7.9---详细安装Oracle 11g---图形化界面方式】](https://blog.csdn.net/qq_41840843/article/details/131198718?spm1001.2014.3001.5501)⛳ 1.1 前言⛳ 1.2 方式一、使用Xmanag…

Risc-v 技术架构

RISC-V&#xff08;Reduced Instruction Set Computing - Five&#xff09;是一种基于精简指令集计算&#xff08;RISC&#xff09;架构的开放式指令集&#xff08;ISA&#xff09;&#xff0c;可以用于设计和实现处理器芯片和计算机体系结构。RISC-V ISA 是一种可扩展的、模块…

国产RISC-V处理器“黑马”跑分曝光!超过多数国内主流高性能处理器!

来源企业投稿 2010年&#xff0c;开源、开放、精简的RISC-V架构诞生。虽然距今仅有12年&#xff0c;但RISC-V迎来了众多玩家的积极参与&#xff0c;其技术、生态、应用都快速发展。在许多秉持匠心的技术人员的耕耘下&#xff0c;RISC-V也早已从传统强项物联网走出&#xff0c;…

简评几款开源RISC-V处理器

RISC-V 能够实现“自主可控”与“普世通用”的国产处理器&#xff0c;中国应该拥抱此技术。 胡振波 转存失败重新上传取消 RISC-V指令集是怎么回事就不多说了。开门见山&#xff0c;说说几款我接触过的开源处理器&#xff0c;按我接触的时间顺序来排序。 1. Rocket&#xff0c;…