basler相机曝光时间,增益等参数设置
参考:http://blog.csdn.net/liyuanbhu/article/details/74841591
参考:http://blog.csdn.net/cocoasprite/article/details/60955012
一、
在设置相机参数之前,先要获取相机对象。Pylon::CTlFactory 具有一个 CreateDevice() 方法可以用来生成一个相机对象,并返回一个指向 IPylonDevice 的指针。下面的代码用来获取枚举出来的第一个相机对应的对象。
- Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
- DeviceInfoList_t lstDevices;
- TlFactory.EnumerateDevices( lstDevices );
- IPylonDevice * pDevice;
- if(!lstDevices.empty())
- {
- pDevice = TlFactory.CreateDevice(lstDevices[0]);
- }
上面的代码还可以简化为:
- Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
- IPylonDevice * pDevice = TlFactory.CreateFirstDevice();
上面 CreateFirstDevice 函数是用来生成枚举到的第一个相机的接口。我们知道传输层还分 GigE、USB等许多中,如果我们希望直接生成 GigE 接口的第一个相机接口,可以先获得GigE 传输层的接口,然后调用接口中的CreateFirstDevice函数,具体可以参考下面的代码片段:
- Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
- Pylon::IGigETransportLayer* pTl = static_cast<Pylon::IGigETransportLayer*> (TlFactory.CreateTl("BaslerGigE"));
- IPylonDevice * pDevice = pTl->CreateFirstDevice();
上一篇博客介绍了相机的参数是用 GenApi Node Maps 数据结构来体现的。这个 Node Maps 的接口类型为 GenApi::INodeMap,可以通过 IPylonDevice 的 GetTLNodeMap() 函数和 GetNodeMap() 函数来获得。顾名思义 GetTLNodeMap() 是用来获得传输层参数的,GetNodeMap() 对应的是相机本身的参数。下面是代码示例。
- Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
- IPylonDevice * pDevice = TlFactory.CreateFirstDevice();
- GenApi::INodeMap* NodeMap = pDevice->GetNodeMap();
- GenApi::INodeMap* TLNodeMap = pDevice->GetTLNodeMap();
那么一个相机都有哪些参数,这些参数的名称是什么呢?这就需要参考 GenICam Standard Feature Naming Convention (SFNC)了。Basler 的 USB3 的相机遵守 SFNC 2.0 标准,GigE 和 Firewire 相机只支持 1.x 版本的 SFNC。SFNC 2.0 和 SFNC 1.x 还是有不少差异的。比如相机的增益,在 SFNC 2.0 标准中是浮点型参量,名称为 “Gain”, 在 1.x 中是整数型参量,名称为 “GainRaw”。下面举个例子,我们要获取 “Gain” 这个参量的范围,并且将这个参量的值设为最大最小值的平均值。那我们的代码可以这样写:
- Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
- IPylonDevice * pDevice = TlFactory.CreateFirstDevice();
- GenApi::INodeMap* NodeMap = pDevice->GetNodeMap();
- GenApi::INode *pNode = pNodeMap->GetNode("Gain");
- GenApi::CFloatPtr gain(pNode);
- float gainMin = gain->GetMin();
- float gainMax = gain->GetMax();
- qDebug() << "current gain = " << gain->GetValue();
- gain->SetValue(gainMin + (gainMax - gainMin) / 2.0);
这里我们要注意几个地方,首先如果我们的相机不支持 Gain 这个参数,那么 pNode 将是空指针。后面的操作就会报错。第二,Gain 这个参数不一定可读可写,如果不可读 gain->GetMin() 就会报错。如果不可写,那么 gain->SetValue() 就会报错。所以我们应该用 GenApi::IsReadable() 和 GenApi::IsWritable() 来测试这个 INode 接口是否可以读写。另外还有一点需要特别注意,相机的参数都是在相机被打开后才可以读写的。如果我们知道相机是哪个传输层的,还可以有更简单的访问方式。比如我们的相机是 GigE 接口的,那么可以从 pDevice 构造一个 CBaslerGigEInstantCamera 对象,然后通过这个对象访问相机的各个属性。比如下面的代码:
- Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
- Pylon::IGigETransportLayer* pTl = static_cast<Pylon::IGigETransportLayer*> (TlFactory.CreateTl("BaslerGigE"));
- IPylonDevice * pDevice = pTl->CreateFirstDevice();
- CBaslerGigEInstantCamera camera(pDevice);
- camera.Open();
- qDebug() << GenApi::IsReadable(camera.GainRaw);
- qDebug() << "GainRaw = " << camera.GainRaw.GetValue();
- qDebug() << "GainRaw.GetMax() = " << camera.GainRaw.GetMax();
- qDebug() << GenApi::IsWritable(camera.GainRaw);
- camera.GainRaw = camera.GainRaw.GetMax();
- camera.GainRaw.SetValue(camera.GainRaw.GetMin());
- camera.Close();
二、具体例子
- /*index = 0//设置相机的内触发
- = 1//设置相机的外触发
- = 2//设置相机的曝光时间
- = 3//设置相机的增益
- = 4//相机的频率
- = 5//图片的宽度
- = 6//图片的高度
- = 7//灯的触发信号
- */
- static void SetupCamera( Pylon::CInstantCamera& camera, int index)
- {
- int i = 0;
- try
- {
- using namespace GenApi;
- INodeMap &cameraNodeMap = camera.GetNodeMap();
- if(index == 0)
- {
- CEnumerationPtr ptrTriggerSel = cameraNodeMap.GetNode ("TriggerSelector");
- ptrTriggerSel->FromString("FrameStart");
- CEnumerationPtr ptrTrigger = cameraNodeMap.GetNode ("TriggerMode");
- ptrTrigger->SetIntValue(0);
- }
- else if(index == 1)
- {
- CEnumerationPtr ptrTriggerSel = cameraNodeMap.GetNode ("TriggerSelector");
- ptrTriggerSel->FromString("FrameStart");
- CEnumerationPtr ptrTrigger = cameraNodeMap.GetNode ("TriggerMode");
- ptrTrigger->SetIntValue(1);
- CEnumerationPtr ptrTriggerSource = cameraNodeMap.GetNode ("TriggerSource");
- ptrTriggerSource->FromString("Line1");
- }
- else if(index == 2)
- {
- const CFloatPtr exposureTime = cameraNodeMap.GetNode("ExposureTimeAbs");
- exposureTime->SetValue(theApp.m_iExposeTime);
- }
- else if(index == 3)
- {
- const CIntegerPtr cameraGen = cameraNodeMap.GetNode("GainRaw");
- cameraGen->SetValue(theApp.m_iGain);
- }
- else if(index == 4)
- {
- const CBooleanPtr frameRate = cameraNodeMap.GetNode("AcquisitionFrameRateEnable");
- frameRate->SetValue(TRUE);
- const CFloatPtr frameRateABS = cameraNodeMap.GetNode("AcquisitionFrameRateAbs");
- frameRateABS->SetValue(theApp.m_iHZ);
- }
- else if(index == 5)
- {
- const CIntegerPtr widthPic = cameraNodeMap.GetNode("Width");
- widthPic->SetValue(theApp.m_Width);
- }
- else if(index == 6)
- {
- const CIntegerPtr heightPic = cameraNodeMap.GetNode("Height");
- heightPic->SetValue(theApp.m_Height);
- }
- else if(index == 7)
- {
- CEnumerationPtr ptrLineSource = cameraNodeMap.GetNode ("LineSource");
- ptrLineSource->SetIntValue(2);
- }
basler相机曝光时间,增益等参数设置相关推荐
- 大恒相机开发实践(3)——参数设置
目录 前言 正文 初始化配置信息 创建Xml节点 创建节点下面的Attribute 总结 前言 这一部分的内容放在如何生成大恒相机的参数,但其实难点并不在我接下去写的部分.难点在于你获得了这个节点的N ...
- [视觉实战案例]Qt调用Basler网口工业相机SDK实现采图和相机参数设置
文章目录 1.采图UI显示 2.硬件连接和IP配置 2.1 外触发硬件接线 2.2 IP配置 3.代码实现 4.源码下载 1.采图UI显示 2.硬件连接和IP配置 2.1 外触发硬件接线 根据相机接线 ...
- Qt之设置BASLER相机参数
一.背景知识 在设置相机参数之前,先要获取相机对象.Pylon::CTlFactory 具有一个 CreateDevice() 方法可以用来生成一个相机对象,并返回一个指向 IPylonDevice ...
- basler相机参数简要中文说明_basler设置相机参数
/*index = 0//设置相机的内触发 = 1//设置相机的外触发 = 2//设置相机的曝光时间 = 3//设置相机的增益 = 4//相机的频率 = 5//图片的宽度 = 6/ ...
- directshow c++ 设置 曝光_DirectShow 接口访问相机参数设置方法
本文档适用于所有适用 directshow 接口访问相机的程序,例如 MATLAB和 Labview 的 ImaqDx 接口.Halcon 的 Directshow 接口等. MATLAB 中,可以通 ...
- Qt(C++)项目中使用 Basler 工业相机(2 参数设置)
Qt(C++)项目中使用 Basler 工业相机(2 参数设置) 上一篇博客介绍了 pylon 的基本结构和如何枚举系统中的相机.这一篇主要讲讲如何设置相机的各个参数. 在设置相机参数之前,先要获取相 ...
- MVS海康相机参数设置完整版
常用属性 基本属性 使能采集帧率控制:开启该参数可以采集帧率的数值大小设置相机的实时帧率.说明:若采集帧率数值高于理论帧率数值,则无效,相机仍以理论帧率数值进行图像采集. 采集帧率:需要设置相机帧率时 ...
- 海康工业相机SDK + OpenCV实例(4):相机参数设置详解
海康工业相机SDK + OpenCV实例(4): 相机参数设置详解 文章目录 海康工业相机SDK + OpenCV实例(4): 相机参数设置详解 前言 一.相机参数基本接口 二.自动曝光时间调整亮度 ...
- python控制相机,在OpenCV / Python中设置相机参数
我正在使用来自Thorlabs(DC1545M)的USB摄像机的OpenCV(2.4)和Python(2.7.3). 我正在对视频流进行一些图像分析,我希望能够从我的视频流中更改某些相机参数.令人困惑 ...
最新文章
- Spring Cloud Greenwich 最后一个计划版本发布!
- One order search by guid uuid
- 淘票票首次公开小程序开发秘籍,踩过坑才知道怎么走!
- java中signum使用_Java.math.BigInteger.signum()方法实例
- ansible基本模块-copy
- zabbix 添加 ROS 软路由监控 WinBox设置
- 微信小程序 页面递归生成
- python编写音乐标签_如何用PYTHON代码写出音乐
- 如何从Java官网下载 Java API 文档
- Centos6.5 一件安装FFmpeg 包括其中的坑
- 阿里巴巴实习面试经历
- 肝了这篇文章,我对服务器硬件有了深刻的认识!
- 父亲错了--利文斯登•拉米德
- 如何实现一个简单的过滤器
- 监视注册表变化 - Registry Auditing
- 中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本
- mmdetection学习系列(1)——SSD网络
- mPEG-SCM 甲氧基PEG琥珀酰亚胺乙酸酯
- 【shaderforge学习笔记】 Vector Operations(向量运算)
- max沿道路形状铺uv
热门文章
- 华为网络模拟器ENSP安装(附安装包)
- Telemetry网络监控技术讲解
- org.apache.ibatis.binding.BindingException: Type interface xxx.Mapper is not known to the MapperRegi
- LG P990 (LG Optimus擎天柱2X) 获得Root权限的方法
- 程序员鼓励师到底是个什么鬼
- 你支持你女朋友做程序员鼓励师吗?
- 从零学习pytorch 第1课 搭建一个超简单的网络
- 怎么学好zbrush?
- 新库上线 | CnOpenData联合国大会投票信息数据
- ActFramework 入门指南