Baumer工业相机堡盟相机如何使用HDR高动态范围功能( HDR功能的优点和行业典型应用)(C++)(C#)

简介: Baumer工业相机堡盟相机如何使用HDR高动态范围功能( HDR功能的优点和行业典型应用)(C++)(C#)

项目场景

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。  


Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。


Baumer工业相机堡盟相机中HDR功能是一种开启后会连拍三张照片,分别对应欠曝光、正常曝光和过度曝光,然后把这三张图片合到一块并且突出每张照片最好的部分从而生成一张高动态范围图像的模式。


技术背景

HDR,High-Dynamic Range,也就是高动态范围,用于对象的最明亮和最暗部分相差特别大的时候。HDR是高动态范围的缩写,该功能在工业相机中用于捕捉比传统成像技术更广泛的亮度和明度的图像。


一般情况下,HDR开启后会连拍三张照片,分别对应欠曝光、正常曝光和过度曝光,然后把这三张图片合到一块并且突出每张照片最好的部分从而生成一张精妙绝伦的照片。


这就是为什么当打开HDR模式时,相机会花费较长时间拍照。实际上它是拍摄了三张照片,而非一张。它的好处在于拍出的图像不会像是透过相机看到的,而更像是人眼直接看到的。总之,HDR能让该亮的亮、让该暗的暗、让亮/暗部的细节更丰满。


具有HDR功能的工业相机使用多次曝光来捕捉具有不同亮度水平的图像,然后将它们合并到一张图像中,以显示场景亮度和对比度的更准确表述。这有助于工业相机在图像的亮部和暗部捕捉到更广泛的细节。


HDR技术在工业应用中已变得越来越重要,因为准确和详细的成像是至关重要的,例如在质量控制、检查和科学研究中。它可以提高图像分析和测量的准确性和可靠性,最终导致更明智的决策


CameraExplorer-使用HDR功能


5.png


BGAPI SDK-使用HDR功能

在这里我们展示下C++语言下HDR功能开启的相关代码:

SystemList 
Open a System 
Get the InterfaceList and fill it Open an Interface 
Get the DeviceList and fill it 
Open a Device 
//Device Parameter Setup 
pDevice->GetRemoteNode("TriggerMode")->SetString("Off"); 
pDevice->GetRemoteNode("ExposureTime")->SetDouble(10000.0); 
std::cout << " ExposureTime : "  
          << pDevice->GetRemoteNode("ExposureTime")->GetDouble()            << std::endl 
//HDR parameter change 
std::cout << "HDR parameter change" << std::endl; 
pDevice->GetRemoteNode("HDREnable")->SetBool(true);
std::cout << "HDREnable : "  
          << pDevice->GetRemoteNode("HDREnable")->GetBool()            << std::endl;
pDevice->GetRemoteNode("HDRIndex")->SetInt(0); 
std::cout << "HDRIndex: "  
          << pDevice->GetRemoteNode("HDRIndex")->GetInt() 
          << std::endl; 
pDevice->GetRemoteNode("HDRExposureRatio")->SetInt(185); //t_Exp_0 
std::cout << "HDRExposureRatio: "  
          << pDevice->GetRemoteNode("HDRExposureRatio")->GetInt()  
          << std::endl; 
std::cout << "HDRExposureRatioPercent : "  
          << pDevice->GetRemoteNode("HDRExposureRatioPercent")->GetDouble()            << std::endl; 
pDevice->GetRemoteNode("HDRPotentialAbs")->SetInt(40); //Pot_0 
std::cout << "HDRPotentialAbs : "  
          << pDevice->GetRemoteNode("HDRPotentialAbs")->GetInt()  
          << std::endl;

4.png

pDevice->GetRemoteNode("HDRIndex")->SetInt(1); 
std::cout << "HDRIndex: "  
          << pDevice->GetRemoteNode("HDRIndex")->GetInt()  
          << std::endl; 
pDevice->GetRemoteNode("HDRExposureRatio")->SetInt(45); //t_Exp_1
std::cout << "HDRExposureRatio: "  
          << pDevice->GetRemoteNode("HDRExposureRatio")->GetInt()  
          << std::endl; 
std::cout << "HDRExposureRatioPercent: "  
          << pDevice->GetRemoteNode("HDRExposureRatioPercent")->GetDouble()            << std::endl; 
pDevice->GetRemoteNode("HDRPotentialAbs")->SetInt(20); //Pot_1
std::cout << "HDRPotentialAbs: "  
          << pDevice->GetRemoteNode("HDRPotentialAbs")->GetInt()  
          << std::endl;

3.png


在这里我们展示下C#语言下HDR功能开启的相关代码:

SystemList 
Open a System 
Get the InterfaceList and fill it Open an Interface 
Get the DeviceList and fill it 
Open a Device 
//Device Parameter Setup 
mDevice.RemoteNodeList["TriggerMode"].Value = "Off"; 
mDevice.RemoteNodeList["ExposureTime"].Value = 10000.0; 
System.Console.Write("ExposureTime : {0}\n",  
   (double)mDevice.RemoteNodeList["ExposureTime"].Value); System.Console.Write("\n"); 
//HDR parameter change 
System.Console.Write("HDR parameter change\n"); 
mDevice.RemoteNodeList["HDREnable"].Value = true; 
System.Console.Write("  HDREnable : {0}\n", 
   (bool)mDevice.RemoteNodeList["HDREnable"].Value);
//only HXG 
mDevice.RemoteNodeList["HDREnableTriggerAutoMode"].Value = false; 
System.Console.Write("HDREnableTriggerAutoMode : {0}\n",  
   (bool)mDevice.RemoteNodeList["HDREnableTriggerAutoMode"].Value); 
mDevice.RemoteNodeList["HDRIndex"].Value = (long)0;
System.Console.Write("HDRIndex : {0}\n", 
   (long)mDevice.RemoteNodeList["HDRIndex"].Value);
mDevice.RemoteNodeList["HDRExposureRatio"].Value = (long)185; //t_Exp_0 System.Console.Write("HDRExposureRatio : {0}\n", 
   (long)mDevice.RemoteNodeList["HDRExposureRatio"].Value); 
System.Console.Write("HDRExposureRatioPercent : {0}\n", 
   (double)mDevice.RemoteNodeList["HDRExposureRatioPercent"].Value); 
mDevice.RemoteNodeList["HDRExposureRatio"].Value = (long)40; //Pot_0
System.Console.Write("HDRPotentialAbs : {0}\n", 
   (long)mDevice.RemoteNodeList["HDRPotentialAbs"].Value);

2.png

mDevice.RemoteNodeList["HDRIndex"].Value = (long)1;
System.Console.Write("HDRIndex : {0}\n", 
   (long)mDeviceRemoteNodeList["HDRIndex"].Value); 
mDevice.RemoteNodeList["HDRExposureRatio"].Value = (long)45; //t_Exp_1 System.Console.Write("HDRExposureRatio : {0}\n", 
   (long)mDevice.RemoteNodeList["HDRExposureRatio"].Value); 
System.Console.Write("HDRExposureRatioPercent : {0}\n", 
   (double)mDevice.RemoteNodeList["HDRExposureRatioPercent"].Value); 
mDevice.RemoteNodeList["HDRPotentialAbs"].Value = (long)20; //Pot_1
System.Console.Write("HDRPotentialAbs : {0}\n", 
   (long)mDevice.RemoteNodeList["HDRPotentialAbs"].Value); 
System.Console.Write("\n");

1.png



HDR高动态范围功能的优点

工业相机的HDR(高动态范围)功能提供了几个优势:


1. 提高图像质量:HDR技术使摄像机能够捕捉到高质量的图像,具有更好的色彩准确性和细节,即使在具有挑战性的照明条件下。


2. 更大的对比度:HDR技术增强了图像的对比度范围,产生了更鲜艳和醒目的视觉效果。


3. 减少噪音:HDR相机可以减少或消除图像噪音,从而产生更干净、更清晰的图像。


4. 增加灵活性。HDR功能使相机能够在更广泛的照明条件下拍摄图像,使其更加灵活,能够适应不同的环境。


5. 加强自动化。随着图像质量的提高,HDR相机可以为自动化质量控制和检查过程提供更可靠和准确的数据。


HDR高动态范围功能的行业应用

工业相机的HDR(高动态范围)功能用于拍摄高对比度场景的图像。HDR可用于各种场景,包括。


1. 汽车制造。HDR可用于汽车制造业,捕捉具有不同反射率和亮度水平的各种零部件的图像。


2. 检查和质量控制。在工业环境中,HDR可以用来捕捉具有不同对比度和亮度的产品和部件的图像,以进行质量控制。


3. 监视。HDR可用于监控摄像机,在高对比度的情况下捕捉图像,如明亮的阳光或昏暗的区域。


4. 医疗成像。HDR可用于医学成像,以捕捉具有不同反射率和亮度水平的器官的图像。


5. 农业。HDR可用于农业成像,捕捉具有不同反射率和亮度的农作物和植被的图像。


总的来说,工业相机的HDR功能可以在任何需要高对比度成像的场景中发挥作用。

目录
相关文章
|
8月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
1005 27
|
5月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
227 11
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
335 15
|
10月前
|
存储 监控 算法
基于 C# 时间轮算法的控制局域网上网时间与实践应用
在数字化办公与教育环境中,局域网作为内部网络通信的核心基础设施,其精细化管理水平直接影响网络资源的合理配置与使用效能。对局域网用户上网时间的有效管控,已成为企业、教育机构等组织的重要管理需求。这一需求不仅旨在提升员工工作效率、规范学生网络使用行为,更是优化网络带宽资源分配的关键举措。时间轮算法作为一种经典的定时任务管理机制,在局域网用户上网时间管控场景中展现出显著的技术优势。本文将系统阐述时间轮算法的核心原理,并基于 C# 编程语言提供具体实现方案,以期深入剖析该算法在局域网管理中的应用逻辑与实践价值。
247 5
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
480 12
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
420 5
|
存储 安全 物联网
C# 在物联网 (IoT) 应用中的应用
本文介绍了C#在物联网(IoT)应用中的应用,涵盖基础概念、优势、常见问题及其解决方法。重点讨论了网络通信、数据处理和安全问题,并提供了相应的代码示例,旨在帮助开发者更好地利用C#进行IoT开发。
667 3
|
6月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
319 19
|
7月前
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
1309 0
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
344 3