参考:http://blog.csdn.net/liyuanbhu/article/details/74841591

参考:http://blog.csdn.net/cocoasprite/article/details/60955012

一、

在设置相机参数之前,先要获取相机对象。Pylon::CTlFactory 具有一个 CreateDevice() 方法可以用来生成一个相机对象,并返回一个指向 IPylonDevice 的指针。下面的代码用来获取枚举出来的第一个相机对应的对象。

  1. Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
  2. DeviceInfoList_t lstDevices;
  3. TlFactory.EnumerateDevices( lstDevices );
  4. IPylonDevice * pDevice;
  5. if(!lstDevices.empty())
  6. {
  7. pDevice = TlFactory.CreateDevice(lstDevices[0]);
  8. }

上面的代码还可以简化为:

  1. Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
  2. IPylonDevice * pDevice = TlFactory.CreateFirstDevice();

上面 CreateFirstDevice 函数是用来生成枚举到的第一个相机的接口。我们知道传输层还分 GigE、USB等许多中,如果我们希望直接生成 GigE 接口的第一个相机接口,可以先获得GigE 传输层的接口,然后调用接口中的CreateFirstDevice函数,具体可以参考下面的代码片段:

  1. Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
  2. Pylon::IGigETransportLayer* pTl = static_cast<Pylon::IGigETransportLayer*> (TlFactory.CreateTl("BaslerGigE"));
  3. IPylonDevice * pDevice = pTl->CreateFirstDevice();

上一篇博客介绍了相机的参数是用 GenApi Node Maps 数据结构来体现的。这个 Node Maps 的接口类型为 GenApi::INodeMap,可以通过 IPylonDevice 的 GetTLNodeMap() 函数和 GetNodeMap() 函数来获得。顾名思义 GetTLNodeMap() 是用来获得传输层参数的,GetNodeMap() 对应的是相机本身的参数。下面是代码示例。

  1. Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
  2. IPylonDevice * pDevice = TlFactory.CreateFirstDevice();
  3. GenApi::INodeMap* NodeMap = pDevice->GetNodeMap();
  4. 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” 这个参量的范围,并且将这个参量的值设为最大最小值的平均值。那我们的代码可以这样写:

  1. Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
  2. IPylonDevice * pDevice = TlFactory.CreateFirstDevice();
  3. GenApi::INodeMap* NodeMap = pDevice->GetNodeMap();
  4. GenApi::INode *pNode = pNodeMap->GetNode("Gain");
  5. GenApi::CFloatPtr gain(pNode);
  6. float gainMin = gain->GetMin();
  7. float gainMax = gain->GetMax();
  8. qDebug() << "current gain = " << gain->GetValue();
  9. gain->SetValue(gainMin + (gainMax - gainMin) / 2.0);

这里我们要注意几个地方,首先如果我们的相机不支持 Gain 这个参数,那么 pNode 将是空指针。后面的操作就会报错。第二,Gain 这个参数不一定可读可写,如果不可读 gain->GetMin() 就会报错。如果不可写,那么 gain->SetValue() 就会报错。所以我们应该用 GenApi::IsReadable() 和 GenApi::IsWritable() 来测试这个 INode 接口是否可以读写。另外还有一点需要特别注意,相机的参数都是在相机被打开后才可以读写的。如果我们知道相机是哪个传输层的,还可以有更简单的访问方式。比如我们的相机是 GigE 接口的,那么可以从 pDevice 构造一个 CBaslerGigEInstantCamera 对象,然后通过这个对象访问相机的各个属性。比如下面的代码:

  1. Pylon::CTlFactory& TlFactory = CTlFactory::GetInstance();
  2. Pylon::IGigETransportLayer* pTl = static_cast<Pylon::IGigETransportLayer*> (TlFactory.CreateTl("BaslerGigE"));
  3. IPylonDevice * pDevice = pTl->CreateFirstDevice();
  4. CBaslerGigEInstantCamera camera(pDevice);
  5. camera.Open();
  6. qDebug() << GenApi::IsReadable(camera.GainRaw);
  7. qDebug() << "GainRaw = " << camera.GainRaw.GetValue();
  8. qDebug() << "GainRaw.GetMax() = " << camera.GainRaw.GetMax();
  9. qDebug() << GenApi::IsWritable(camera.GainRaw);
  10. camera.GainRaw = camera.GainRaw.GetMax();
  11. camera.GainRaw.SetValue(camera.GainRaw.GetMin());
  12. camera.Close();

二、具体例子

  1. /*index = 0//设置相机的内触发
  2. = 1//设置相机的外触发
  3. = 2//设置相机的曝光时间
  4. = 3//设置相机的增益
  5. = 4//相机的频率
  6. = 5//图片的宽度
  7. = 6//图片的高度
  8. = 7//灯的触发信号
  9. */
  10. static void SetupCamera( Pylon::CInstantCamera& camera, int index)
  11. {
  12. int i = 0;
  13. try
  14. {
  15. using namespace GenApi;
  16. INodeMap &cameraNodeMap = camera.GetNodeMap();
  17. if(index == 0)
  18. {
  19. CEnumerationPtr ptrTriggerSel = cameraNodeMap.GetNode ("TriggerSelector");
  20. ptrTriggerSel->FromString("FrameStart");
  21. CEnumerationPtr ptrTrigger = cameraNodeMap.GetNode ("TriggerMode");
  22. ptrTrigger->SetIntValue(0);
  23. }
  24. else if(index == 1)
  25. {
  26. CEnumerationPtr ptrTriggerSel = cameraNodeMap.GetNode ("TriggerSelector");
  27. ptrTriggerSel->FromString("FrameStart");
  28. CEnumerationPtr ptrTrigger = cameraNodeMap.GetNode ("TriggerMode");
  29. ptrTrigger->SetIntValue(1);
  30. CEnumerationPtr ptrTriggerSource = cameraNodeMap.GetNode ("TriggerSource");
  31. ptrTriggerSource->FromString("Line1");
  32. }
  33. else if(index == 2)
  34. {
  35. const CFloatPtr exposureTime = cameraNodeMap.GetNode("ExposureTimeAbs");
  36. exposureTime->SetValue(theApp.m_iExposeTime);
  37. }
  38. else if(index == 3)
  39. {
  40. const CIntegerPtr cameraGen = cameraNodeMap.GetNode("GainRaw");
  41. cameraGen->SetValue(theApp.m_iGain);
  42. }
  43. else if(index == 4)
  44. {
  45. const CBooleanPtr frameRate = cameraNodeMap.GetNode("AcquisitionFrameRateEnable");
  46. frameRate->SetValue(TRUE);
  47. const CFloatPtr frameRateABS = cameraNodeMap.GetNode("AcquisitionFrameRateAbs");
  48. frameRateABS->SetValue(theApp.m_iHZ);
  49. }
  50. else if(index == 5)
  51. {
  52. const CIntegerPtr widthPic = cameraNodeMap.GetNode("Width");
  53. widthPic->SetValue(theApp.m_Width);
  54. }
  55. else if(index == 6)
  56. {
  57. const CIntegerPtr heightPic = cameraNodeMap.GetNode("Height");
  58. heightPic->SetValue(theApp.m_Height);
  59. }
  60. else if(index == 7)
  61. {
  62. CEnumerationPtr ptrLineSource = cameraNodeMap.GetNode ("LineSource");
  63. ptrLineSource->SetIntValue(2);
  64. }

basler相机曝光时间,增益等参数设置相关推荐

  1. 大恒相机开发实践(3)——参数设置

    目录 前言 正文 初始化配置信息 创建Xml节点 创建节点下面的Attribute 总结 前言 这一部分的内容放在如何生成大恒相机的参数,但其实难点并不在我接下去写的部分.难点在于你获得了这个节点的N ...

  2. [视觉实战案例]Qt调用Basler网口工业相机SDK实现采图和相机参数设置

    文章目录 1.采图UI显示 2.硬件连接和IP配置 2.1 外触发硬件接线 2.2 IP配置 3.代码实现 4.源码下载 1.采图UI显示 2.硬件连接和IP配置 2.1 外触发硬件接线 根据相机接线 ...

  3. Qt之设置BASLER相机参数

    一.背景知识 在设置相机参数之前,先要获取相机对象.Pylon::CTlFactory 具有一个 CreateDevice() 方法可以用来生成一个相机对象,并返回一个指向 IPylonDevice ...

  4. basler相机参数简要中文说明_basler设置相机参数

    /*index = 0//设置相机的内触发          = 1//设置相机的外触发  = 2//设置相机的曝光时间 = 3//设置相机的增益 = 4//相机的频率 = 5//图片的宽度 = 6/ ...

  5. directshow c++ 设置 曝光_DirectShow 接口访问相机参数设置方法

    本文档适用于所有适用 directshow 接口访问相机的程序,例如 MATLAB和 Labview 的 ImaqDx 接口.Halcon 的 Directshow 接口等. MATLAB 中,可以通 ...

  6. Qt(C++)项目中使用 Basler 工业相机(2 参数设置)

    Qt(C++)项目中使用 Basler 工业相机(2 参数设置) 上一篇博客介绍了 pylon 的基本结构和如何枚举系统中的相机.这一篇主要讲讲如何设置相机的各个参数. 在设置相机参数之前,先要获取相 ...

  7. MVS海康相机参数设置完整版

    常用属性 基本属性 使能采集帧率控制:开启该参数可以采集帧率的数值大小设置相机的实时帧率.说明:若采集帧率数值高于理论帧率数值,则无效,相机仍以理论帧率数值进行图像采集. 采集帧率:需要设置相机帧率时 ...

  8. 海康工业相机SDK + OpenCV实例(4):相机参数设置详解

    海康工业相机SDK + OpenCV实例(4): 相机参数设置详解 文章目录 海康工业相机SDK + OpenCV实例(4): 相机参数设置详解 前言 一.相机参数基本接口 二.自动曝光时间调整亮度 ...

  9. python控制相机,在OpenCV / Python中设置相机参数

    我正在使用来自Thorlabs(DC1545M)的USB摄像机的OpenCV(2.4)和Python(2.7.3). 我正在对视频流进行一些图像分析,我希望能够从我的视频流中更改某些相机参数.令人困惑 ...

最新文章

  1. text、RC、Parquet、ORC
  2. Jquery之dom操作
  3. OpenStack Heat 如何来实现和支持编排
  4. 电磁场与电磁波第二章 电磁场的基本规律
  5. SAP TableControl 控制单个单元格输入
  6. 程序员过关斩将--你的面向接口编程一定对吗?
  7. ejb生命周期_EJB 3.x:生命周期和并发模型(第1部分)
  8. 论文学习14-End-to-End Relation Extraction using LSTMs on Sequences and Tree Structures(端到端实体关系抽取)
  9. vue页面渲染(请求返回的后端)data,文本换行与显示bug 的分析与解决提示
  10. 【英语学习】【Level 07】U02 Live Work L4 Welcome to my neighborhood
  11. 一次成功的mybatis-plus级联查询
  12. 具有免校准和带漏电检测功能的计量芯片HLW8112
  13. Windows中I/O完成端口机制详解
  14. 0x0000011b解决办法
  15. 基于PHP和YII框架技术的班级管理系统 | 饭饭博客
  16. 安卓手机怎样安装apk应用
  17. terraform 安装及命令
  18. 这一年来在疫情下,作为沪漂的生活
  19. 深读5G发展的趋势后带给我的感受
  20. 二层交换、三层交换和路由的原理及区别

热门文章

  1. catkin工作区 各文件夹功能
  2. 调度过磅结算计算机系统,基于规则引擎的生产企业原材料过磅结算系统的研究与应用...
  3. 组合逻辑控制器时序系统
  4. Python 一行代码将你的头像转成动漫风!
  5. Stata基础绘图教程
  6. 数值运算工具Fortran(1)
  7. 受亚马逊、微软青睐 Bespin Global 获上亿A轮融资,君联资本领投
  8. vue-ssr的使用
  9. 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(十六):神经网络笔记3(上)
  10. 年末贺岁新路启程~机器人工程专业工作总结和展望