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功能可以在任何需要高对比度成像的场景中发挥作用。

目录
相关文章
|
23天前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
92 0
|
9天前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
20 8
|
20天前
|
C#
C# 一分钟浅谈:循环结构 for 和 while 的应用
【9月更文挑战第1天】循环结构是编程中的基础概念,C# 中常用的 `for` 和 `while` 循环允许重复执行代码直至满足特定条件。`for` 循环基于计数,适用于已知循环次数的情况;`while` 循环基于条件,适用于未知循环次数的情况;`do-while` 循环则至少执行一次循环体。本文详细介绍了这些循环的语法和示例,并探讨了常见问题及其解决方法,如循环条件和更新表达式的错误设置。通过综合应用示例(如计算阶乘和斐波那契数列),帮助读者更好地理解和掌握循环结构的使用方法。正确使用循环可以提高程序的效率和可读性。
37 2
|
30天前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
32 2
|
20天前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
31 0
|
21天前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
50 0
|
21天前
|
数据安全/隐私保护 C# UED
利用 Xamarin 开展企业级移动应用开发:从用户登录到客户管理,全面演示C#与Xamarin.Forms构建跨平台CRM应用的实战技巧与代码示例
【8月更文挑战第31天】利用 Xamarin 进行企业级移动应用开发能显著提升效率并确保高质量和高性能。Xamarin 的跨平台特性使得开发者可以通过单一的 C# 代码库构建 iOS、Android 和 Windows 应用,帮助企业快速推出产品并保持一致的用户体验。本文通过一个简单的 CRM 示例应用演示 Xamarin 的使用方法,并提供了具体的代码示例。该应用包括用户登录、客户列表显示和添加新客户等功能。此外,还介绍了如何增强应用的安全性、数据持久化、性能优化及可扩展性,从而构建出功能全面且体验良好的移动应用。
26 0
|
21天前
|
开发者 C# C++
揭秘:如何轻松驾驭Uno Platform,用C#和XAML打造跨平台神器——一步步打造你的高性能WebAssembly应用!
【8月更文挑战第31天】Uno Platform 是一个跨平台应用程序框架,支持使用 C# 和 XAML 创建多平台应用,包括 Web。通过编译为 WebAssembly,Uno Platform 可实现在 Web 上运行高性能、接近原生体验的应用。本文介绍如何构建高效的 WebAssembly 应用:首先确保安装最新版本的 Visual Studio 或 VS Code 并配置 Uno Platform 开发环境;接着创建新的 Uno Platform 项目;然后通过安装工具链并使用 Uno WebAssembly CLI 编译应用;最后添加示例代码并测试应用。
41 0
|
1月前
|
存储 编译器 C++
C++多态实现的原理:深入探索与实战应用
【8月更文挑战第21天】在C++的浩瀚宇宙中,多态性(Polymorphism)无疑是一颗璀璨的星辰,它赋予了程序高度的灵活性和可扩展性。多态允许我们通过基类指针或引用来调用派生类的成员函数,而具体调用哪个函数则取决于指针或引用所指向的对象的实际类型。本文将深入探讨C++多态实现的原理,并结合工作学习中的实际案例,分享其技术干货。
40 0
|
4月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
164 3