Baumer工业相机堡盟相机如何使用ROI感兴趣区域功能( PARTIAL SCAN ROI功能的优点和行业应用)(C#)

news/2025/2/11 18:50:02/

 项目场景

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

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

Baumer工业相机堡盟相机中ROI功能是一种可以直接设置在图像芯片中进行区域设置感兴趣的区域的功能,然后在相机内部对图像进行部分扫描的剪切然后再传输到处理器中,可以在一定程度上提供工业相机的的采集帧率。


技术背景

Baumer工业相机中的ROI(感兴趣区域)功能允许用户选择图像中他们想重点分析或处理的特定部分。这可以提高图像处理系统的效率,因为它可以排除多余的或不必要的数据。

ROI功能的工作原理是在较大的图像框架内选择一个矩形区域。然后相机只对这个较小的区域应用所有后续的图像处理算法。这可以提高图像分析的速度和准确性,因为它减少了需要处理的数据量。

总的来说,Baumer工业相机的ROI功能可以减少处理时间,提高图像分析的准确性,使其成为各种工业应用中的有用工具。


代码分析

Baumer工业相机堡盟相机SDK示例中004_PartialScan_ExternalBuffer.cs详细介绍了在C#的环境中如何配置相机的ROI功能。

软件SDK示例地址如下所示:Baumer_GAPI_SDK_2.12.0_win_x86_64_cs\examples\src\0_Common\004_PartialScan_ExternalBuffer\004_PartialScan_ExternalBuffer.cs

/*This example describes the FIRST STEPS of handling Baumer-GAPI SDK.The given source code applies to handling one system, one camera and twenty images.Please see "Baumer-GAPI SDK Programmer's Guide" chapter 5.4.
*/using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices; // Marshal.Copy()namespace _004_PartialScan_ExternalBuffer
{class Program{static int Main(string[] args){//DECLARATIONS OF VARIABLESBGAPI2.SystemList systemList = null;BGAPI2.System mSystem = null;string sSystemID = "";BGAPI2.InterfaceList interfaceList = null;BGAPI2.Interface mInterface = null;string sInterfaceID = "";BGAPI2.DeviceList deviceList = null;BGAPI2.Device mDevice = null;string sDeviceID = "";BGAPI2.DataStreamList datastreamList = null;BGAPI2.DataStream mDataStream = null;string sDataStreamID = "";BGAPI2.BufferList bufferList = null;BGAPI2.Buffer mBuffer = null;int returnCode = 0;//external bufferList<IntPtr> LUserBuffer = new List<IntPtr>();System.Console.Write("\r\n");System.Console.Write("################################################################\r\n");System.Console.Write("# PROGRAMMER'S GUIDE Example 004_PartialScan_ExternalBuffer.cs #\r\n");System.Console.Write("################################################################\r\n");System.Console.Write("\r\n\r\n");System.Console.Write("SYSTEM LIST\r\n");System.Console.Write("###########\r\n\r\n");//COUNTING AVAILABLE SYSTEMS (TL producers)try{systemList = BGAPI2.SystemList.Instance;systemList.Refresh();System.Console.Write("5.1.2   Detected systems:  {0}\r\n", systemList.Count);//SYSTEM DEVICE INFORMATIONforeach (KeyValuePair<string, BGAPI2.System> sys_pair in BGAPI2.SystemList.Instance){System.Console.Write("  5.2.1   System Name:     {0}\r\n", sys_pair.Value.FileName);System.Console.Write("          System Type:     {0}\r\n", sys_pair.Value.TLType);System.Console.Write("          System Version:  {0}\r\n", sys_pair.Value.Version);System.Console.Write("          System PathName: {0}\r\n\r\n", sys_pair.Value.PathName);}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}//OPEN THE FIRST SYSTEM IN THE LIST WITH A CAMERA CONNECTEDtry{foreach (KeyValuePair<string, BGAPI2.System> sys_pair in BGAPI2.SystemList.Instance){System.Console.Write("SYSTEM\r\n");System.Console.Write("######\r\n\r\n");try{sys_pair.Value.Open();System.Console.Write("5.1.3   Open next system \r\n");System.Console.Write("  5.2.1   System Name:     {0}\r\n", sys_pair.Value.FileName);System.Console.Write("          System Type:     {0}\r\n", sys_pair.Value.TLType);System.Console.Write("          System Version:  {0}\r\n", sys_pair.Value.Version);System.Console.Write("          System PathName: {0}\r\n\r\n", sys_pair.Value.PathName);sSystemID = sys_pair.Key;System.Console.Write("        Opened system - NodeList Information \r\n");System.Console.Write("          GenTL Version:   {0}.{1}\r\n\r\n", (long)sys_pair.Value.NodeList["GenTLVersionMajor"].Value, (long)sys_pair.Value.NodeList["GenTLVersionMinor"].Value);System.Console.Write("INTERFACE LIST\r\n");System.Console.Write("##############\r\n\r\n");try{interfaceList = sys_pair.Value.Interfaces;//COUNT AVAILABLE INTERFACESinterfaceList.Refresh(100); // timeout of 100 msecSystem.Console.Write("5.1.4   Detected interfaces: {0}\r\n", interfaceList.Count);//INTERFACE INFORMATIONforeach (KeyValuePair<string, BGAPI2.Interface> ifc_pair in interfaceList){System.Console.Write("  5.2.2   Interface ID:      {0}\r\n", ifc_pair.Value.Id);System.Console.Write("          Interface Type:    {0}\r\n", ifc_pair.Value.TLType);System.Console.Write("          Interface Name:    {0}\r\n\r\n", ifc_pair.Value.DisplayName);}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}System.Console.Write("INTERFACE\r\n");System.Console.Write("#########\r\n\r\n");//OPEN THE NEXT INTERFACE IN THE LISTtry{foreach (KeyValuePair<string, BGAPI2.Interface> ifc_pair in interfaceList){try{System.Console.Write("5.1.5   Open interface \r\n");System.Console.Write("  5.2.2   Interface ID:      {0}\r\n", ifc_pair.Key);System.Console.Write("          Interface Type:    {0}\r\n", ifc_pair.Value.TLType);System.Console.Write("          Interface Name:    {0}\r\n", ifc_pair.Value.DisplayName);ifc_pair.Value.Open();//search for any camera is connetced to this interfacedeviceList = ifc_pair.Value.Devices;deviceList.Refresh(100);if (deviceList.Count == 0){System.Console.Write("5.1.13   Close interface ({0} cameras found) \r\n\r\n", deviceList.Count);ifc_pair.Value.Close();}else{sInterfaceID = ifc_pair.Key;System.Console.Write("  \r\n");System.Console.Write("        Opened interface - NodeList Information \r\n");if (ifc_pair.Value.TLType == "GEV"){long iIPAddress = (long)ifc_pair.Value.NodeList["GevInterfaceSubnetIPAddress"].Value;System.Console.Write("          GevInterfaceSubnetIPAddress: {0}.{1}.{2}.{3}\r\n", (iIPAddress & 0xff000000) >> 24,(iIPAddress & 0x00ff0000) >> 16,(iIPAddress & 0x0000ff00) >> 8,(iIPAddress & 0x000000ff));long iSubnetMask = (long)ifc_pair.Value.NodeList["GevInterfaceSubnetMask"].Value;System.Console.Write("          GevInterfaceSubnetMask:      {0}.{1}.{2}.{3}\r\n", (iSubnetMask & 0xff000000) >> 24,(iSubnetMask & 0x00ff0000) >> 16,(iSubnetMask & 0x0000ff00) >> 8,(iSubnetMask & 0x000000ff));}if (ifc_pair.Value.TLType == "U3V"){//System.Console.Write("          NodeListCount:               {0}\r\n", ifc_pair.Value.NodeList.Count);}System.Console.Write("  \r\n");break;}}catch (BGAPI2.Exceptions.ResourceInUseException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write(" Interface {0} already opened \r\n", ifc_pair.Key);System.Console.Write(" ResourceInUseException {0} \r\n", ex.GetErrorDescription());}}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}//if a camera is connected to the system interface then leave the system loopif (sInterfaceID != ""){break;}}catch (BGAPI2.Exceptions.ResourceInUseException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write(" System {0} already opened \r\n", sys_pair.Key);System.Console.Write(" ResourceInUseException {0} \r\n", ex.GetErrorDescription());}}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}if (sSystemID == ""){System.Console.Write(" No System found \r\n");System.Console.Write(" Input any number to close the program:\r\n");Console.Read();return returnCode;}else{mSystem = systemList[sSystemID];}if (sInterfaceID == ""){System.Console.Write(" No Interface of TLType 'GEV' found \r\n");System.Console.Write("\r\nEnd\r\nInput any number to close the program:\r\n");Console.Read();mSystem.Close();return returnCode;}else{mInterface = interfaceList[sInterfaceID];}System.Console.Write("DEVICE LIST\r\n");System.Console.Write("###########\r\n\r\n");try{//COUNTING AVAILABLE CAMERASdeviceList = mInterface.Devices;deviceList.Refresh(100);System.Console.Write("5.1.6   Detected devices:         {0}\r\n", deviceList.Count);//DEVICE INFORMATION BEFORE OPENINGforeach (KeyValuePair<string, BGAPI2.Device> dev_pair in deviceList){System.Console.Write("  5.2.3   Device DeviceID:        {0}\r\n", dev_pair.Key);System.Console.Write("          Device Model:           {0}\r\n", dev_pair.Value.Model);System.Console.Write("          Device SerialNumber:    {0}\r\n", dev_pair.Value.SerialNumber);System.Console.Write("          Device Vendor:          {0}\r\n", dev_pair.Value.Vendor);System.Console.Write("          Device TLType:          {0}\r\n", dev_pair.Value.TLType);System.Console.Write("          Device AccessStatus:    {0}\r\n", dev_pair.Value.AccessStatus);System.Console.Write("          Device UserID:          {0}\r\n\r\n", dev_pair.Value.DisplayName);}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}System.Console.Write("DEVICE\r\n");System.Console.Write("######\r\n\r\n");//OPEN THE FIRST CAMERA IN THE LISTtry{foreach (KeyValuePair<string, BGAPI2.Device> dev_pair in deviceList){try{System.Console.Write("5.1.7   Open first device \r\n");System.Console.Write("          Device DeviceID:        {0}\r\n", dev_pair.Value.Id);System.Console.Write("          Device Model:           {0}\r\n", dev_pair.Value.Model);System.Console.Write("          Device SerialNumber:    {0}\r\n", dev_pair.Value.SerialNumber);System.Console.Write("          Device Vendor:          {0}\r\n", dev_pair.Value.Vendor);System.Console.Write("          Device TLType:          {0}\r\n", dev_pair.Value.TLType);System.Console.Write("          Device AccessStatus:    {0}\r\n", dev_pair.Value.AccessStatus);System.Console.Write("          Device UserID:          {0}\r\n\r\n", dev_pair.Value.DisplayName);dev_pair.Value.Open();sDeviceID = dev_pair.Key;System.Console.Write("        Opened device - RemoteNodeList Information \r\n");System.Console.Write("          Device AccessStatus:    {0}\r\n", dev_pair.Value.AccessStatus);//SERIAL NUMBERif (dev_pair.Value.RemoteNodeList.GetNodePresent("DeviceSerialNumber") == true)System.Console.Write("          DeviceSerialNumber:     {0}\r\n", (string)dev_pair.Value.RemoteNodeList["DeviceSerialNumber"].Value);else if (dev_pair.Value.RemoteNodeList.GetNodePresent("DeviceID") == true)System.Console.Write("          DeviceID (SN):          {0}\r\n", (string)dev_pair.Value.RemoteNodeList["DeviceID"].Value);elseSystem.Console.Write("          SerialNumber:           Not Available \r\n");//DISPLAY DEVICEMANUFACTURERINFOif (dev_pair.Value.RemoteNodeList.GetNodePresent("DeviceManufacturerInfo") == true)System.Console.Write("          DeviceManufacturerInfo: {0}\r\n", (string)dev_pair.Value.RemoteNodeList["DeviceManufacturerInfo"].Value);//DISPLAY DEVICEFIRMWAREVERSION OR DEVICEVERSIONif (dev_pair.Value.RemoteNodeList.GetNodePresent("DeviceFirmwareVersion") == true)System.Console.Write("          DeviceFirmwareVersion:  {0}\r\n", (string)dev_pair.Value.RemoteNodeList["DeviceFirmwareVersion"].Value);else if (dev_pair.Value.RemoteNodeList.GetNodePresent("DeviceVersion") == true)System.Console.Write("          DeviceVersion:          {0}\r\n", (string)dev_pair.Value.RemoteNodeList["DeviceVersion"].Value);elseSystem.Console.Write("          DeviceVersion:          Not Available \r\n");if (dev_pair.Value.TLType == "GEV"){System.Console.Write("          GevCCP:                 {0}\r\n", (string)dev_pair.Value.RemoteNodeList["GevCCP"].Value);System.Console.Write("          GevCurrentIPAddress:    {0}.{1}.{2}.{3}\r\n", ((long)dev_pair.Value.RemoteNodeList["GevCurrentIPAddress"].Value & 0xff000000) >> 24, ((long)dev_pair.Value.RemoteNodeList["GevCurrentIPAddress"].Value & 0x00ff0000) >> 16, ((long)dev_pair.Value.RemoteNodeList["GevCurrentIPAddress"].Value & 0x0000ff00) >> 8, ((long)dev_pair.Value.RemoteNodeList["GevCurrentIPAddress"].Value & 0x000000ff));System.Console.Write("          GevCurrentSubnetMask:   {0}.{1}.{2}.{3}\r\n", ((long)dev_pair.Value.RemoteNodeList["GevCurrentSubnetMask"].Value & 0xff000000) >> 24, ((long)dev_pair.Value.RemoteNodeList["GevCurrentSubnetMask"].Value & 0x00ff0000) >> 16, ((long)dev_pair.Value.RemoteNodeList["GevCurrentSubnetMask"].Value & 0x0000ff00) >> 8, ((long)dev_pair.Value.RemoteNodeList["GevCurrentSubnetMask"].Value & 0x000000ff));}System.Console.Write("          \r\n");break;}catch (BGAPI2.Exceptions.ResourceInUseException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write(" Device {0} already opened \r\n", dev_pair.Key);System.Console.Write(" ResourceInUseException {0} \r\n", ex.GetErrorDescription());}catch (BGAPI2.Exceptions.AccessDeniedException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write(" Device {0} already opened \r\n", dev_pair.Key);System.Console.Write(" AccessDeniedException {0} \r\n", ex.GetErrorDescription());}}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}if (sDeviceID == ""){System.Console.Write(" No Device found \r\n");System.Console.Write("\r\nEnd\r\nInput any number to close the program:\r\n");Console.Read();mInterface.Close();mSystem.Close();return returnCode;}else{mDevice = deviceList[sDeviceID];}System.Console.Write("DEVICE PARAMETER SETUP\r\n");System.Console.Write("######################\r\n\r\n");try{//SET TRIGGER MODE OFF (FreeRun)mDevice.RemoteNodeList["TriggerMode"].Value = "Off";System.Console.Write("        TriggerMode:              {0}\r\n", (string)mDevice.RemoteNodeList["TriggerMode"].Value);System.Console.Write("  \r\n");//SET A PARTIAL SCAN (ROI...REGION OF INTEREST) IN THE RIGHT BOTTOM AREA OF THE IMAGE//====================================================================================System.Console.Write("    Set ROI parameters to the right bottom quarter of the sensor\r\n\r\n");//IMAGE WIDTH//===========System.Console.Write("        Width\r\n", (string)mDevice.RemoteNodeList["Width"].Interface);System.Console.Write("          description:            {0}\r\n", (string)mDevice.RemoteNodeList["Width"].Description);System.Console.Write("          interface type:         {0}\r\n", (string)mDevice.RemoteNodeList["Width"].Interface);long iImageWidth = 0;long iImageWidthMin = 0;long iImageWidthMax = 0;long iImageWidthInc = 0;//get current value and limitsiImageWidth = (long)mDevice.RemoteNodeList["Width"].Value;iImageWidthMin = (long)mDevice.RemoteNodeList["Width"].Min;iImageWidthMax = (long)mDevice.RemoteNodeList["Width"].Max;iImageWidthInc = (long)mDevice.RemoteNodeList["Width"].Inc;System.Console.Write("          current value:          {0}\r\n", iImageWidth);System.Console.Write("          possible value range:   {0} to {1} with increment of {2}\r\n", iImageWidthMin, iImageWidthMax, iImageWidthInc);//set new width value same to the half value of sensor widthlong widthvalue = (long)mDevice.RemoteNodeList["SensorWidth"].Value / 2 / iImageWidthInc * iImageWidthInc; // find number to match the increment// check new value is within rangeif (widthvalue < iImageWidthMin)widthvalue = iImageWidthMin;if (widthvalue > iImageWidthMax)widthvalue = iImageWidthMax;mDevice.RemoteNodeList["Width"].Value = widthvalue;//recheck new width is setSystem.Console.Write("          set value to:           {0} is half value of the sensor width: {1}\r\n\r\n", (long)mDevice.RemoteNodeList["Width"].Value, (long)mDevice.RemoteNodeList["SensorWidth"].Value);//IMAGE OFFSET X//==============System.Console.Write("        OffsetX\r\n");System.Console.Write("          description:            {0}\r\n", (string)mDevice.RemoteNodeList["OffsetX"].Description);System.Console.Write("          interface type:         {0}\r\n", (string)mDevice.RemoteNodeList["OffsetX"].Interface);long iImageOffsetX = 0;long iImageOffsetXMin = 0;long iImageOffsetXMax = 0;long iImageOffsetXInc = 0;//get current value and limitsiImageOffsetX = (long)mDevice.RemoteNodeList["OffsetX"].Value;iImageOffsetXMin = (long)mDevice.RemoteNodeList["OffsetX"].Min;iImageOffsetXMax = (long)mDevice.RemoteNodeList["OffsetX"].Max;iImageOffsetXInc = (long)mDevice.RemoteNodeList["OffsetX"].Inc;System.Console.Write("          current value:          {0}\r\n", iImageOffsetX);System.Console.Write("          possible value range:   {0} to {1} with increment of {2}\r\n", iImageOffsetXMin, iImageOffsetXMax, iImageOffsetXInc);//set new OffsetX value same to the half value of sensor widthlong OffsetXvalue = (long)mDevice.RemoteNodeList["SensorWidth"].Value / 2 / iImageOffsetXInc * iImageOffsetXInc; // find number to match the increment// check new value is within rangeif (OffsetXvalue < iImageOffsetXMin)OffsetXvalue = iImageOffsetXMin;if (OffsetXvalue > iImageOffsetXMax)OffsetXvalue = iImageOffsetXMax;mDevice.RemoteNodeList["OffsetX"].Value = OffsetXvalue;//recheck new OffsetX is setSystem.Console.Write("          set value to:           {0} is half value of the sensor width: {1}\r\n\r\n", (long)mDevice.RemoteNodeList["OffsetX"].Value, (long)mDevice.RemoteNodeList["SensorWidth"].Value);//IMAGE HEIGHT//============System.Console.Write("        Height\r\n");System.Console.Write("          description:            {0}\r\n", (string)mDevice.RemoteNodeList["Height"].Description);System.Console.Write("          interface type:         {0}\r\n", (string)mDevice.RemoteNodeList["Height"].Interface);long iImageHeight = 0;long iImageHeightMin = 0;long iImageHeightMax = 0;long iImageHeightInc = 0;//get current value and limitsiImageHeight = (long)mDevice.RemoteNodeList["Height"].Value;iImageHeightMin = (long)mDevice.RemoteNodeList["Height"].Min;iImageHeightMax = (long)mDevice.RemoteNodeList["Height"].Max;iImageHeightInc = (long)mDevice.RemoteNodeList["Height"].Inc;System.Console.Write("          current value:          {0}\r\n", iImageHeight);System.Console.Write("          possible value range:   {0} to {1} with increment of {2}\r\n", iImageHeightMin, iImageHeightMax, iImageHeightInc);//set new height value same to the half value of sensor heightlong heightvalue = (long)mDevice.RemoteNodeList["SensorHeight"].Value / 2 / iImageHeightInc * iImageHeightInc; // find number to match the increment// check new value is within rangeif (heightvalue < iImageHeightMin)heightvalue = iImageHeightMin;if (heightvalue > iImageHeightMax)heightvalue = iImageHeightMax;mDevice.RemoteNodeList["Height"].Value = heightvalue;//recheck new height is setSystem.Console.Write("          set value to:           {0} is half value of the sensor height: {1}\r\n\r\n", (long)mDevice.RemoteNodeList["Height"].Value, (long)mDevice.RemoteNodeList["SensorHeight"].Value);//IMAGE OFFSET Y//==============System.Console.Write("        OffsetY\r\n");System.Console.Write("          description:            {0}\r\n", (string)mDevice.RemoteNodeList["OffsetY"].Description);System.Console.Write("          interface type:         {0}\r\n", (string)mDevice.RemoteNodeList["OffsetY"].Interface);long iImageOffsetY = 0;long iImageOffsetYMin = 0;long iImageOffsetYMax = 0;long iImageOffsetYInc = 0;//get current value and limitsiImageOffsetY = (long)mDevice.RemoteNodeList["OffsetY"].Value;iImageOffsetYMin = (long)mDevice.RemoteNodeList["OffsetY"].Min;iImageOffsetYMax = (long)mDevice.RemoteNodeList["OffsetY"].Max;iImageOffsetYInc = (long)mDevice.RemoteNodeList["OffsetY"].Inc;System.Console.Write("          current value:          {0}\r\n", iImageOffsetY);System.Console.Write("          possible value range:   {0} to {1} with increment of {2}\r\n", iImageOffsetYMin, iImageOffsetYMax, iImageOffsetYInc);//set new OffsetY value same to the half value of sensor heightlong OffsetYvalue = (long)mDevice.RemoteNodeList["SensorHeight"].Value / 2 / iImageOffsetYInc * iImageOffsetYInc; // find number to match the increment// check new value is within rangeif (OffsetYvalue < iImageOffsetYMin)OffsetYvalue = iImageOffsetYMin;if (OffsetYvalue > iImageOffsetYMax)OffsetYvalue = iImageOffsetYMax;mDevice.RemoteNodeList["OffsetY"].Value = OffsetYvalue;//recheck new OffsetY is setSystem.Console.Write("          set value to:           {0} is half value of the sensor height: {1}\r\n\r\n", (long)mDevice.RemoteNodeList["OffsetY"].Value, (long)mDevice.RemoteNodeList["SensorHeight"].Value);}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}System.Console.Write("DATA STREAM LIST\r\n");System.Console.Write("################\r\n\r\n");try{//COUNTING AVAILABLE DATASTREAMSdatastreamList = mDevice.DataStreams;datastreamList.Refresh();System.Console.Write("5.1.8   Detected datastreams:     {0}\r\n", datastreamList.Count);//DATASTREAM INFORMATION BEFORE OPENINGforeach (KeyValuePair<string, BGAPI2.DataStream> dst_pair in datastreamList){System.Console.Write("  5.2.4   DataStream ID:          {0}\r\n\r\n", dst_pair.Key);}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}System.Console.Write("DATA STREAM\r\n");System.Console.Write("###########\r\n\r\n");//OPEN THE FIRST DATASTREAM IN THE LISTtry{foreach (KeyValuePair<string, BGAPI2.DataStream> dst_pair in datastreamList){System.Console.Write("5.1.9   Open first datastream \r\n");System.Console.Write("          DataStream ID:          {0}\r\n\r\n", dst_pair.Key);dst_pair.Value.Open();sDataStreamID = dst_pair.Key;System.Console.Write("        Opened datastream - NodeList Information \r\n");System.Console.Write("          StreamAnnounceBufferMinimum:  {0}\r\n", dst_pair.Value.NodeList["StreamAnnounceBufferMinimum"].Value);if (dst_pair.Value.TLType == "GEV"){System.Console.Write("          StreamDriverModel:            {0}\r\n", dst_pair.Value.NodeList["StreamDriverModel"].Value);}System.Console.Write("  \r\n");break;}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}if (sDataStreamID == ""){System.Console.Write(" No DataStream found \r\n");System.Console.Write("\r\nEnd\r\nInput any number to close the program:\r\n");Console.Read();mDevice.Close();mInterface.Close();mSystem.Close();return returnCode;}else{mDataStream = datastreamList[sDataStreamID];}System.Console.Write("BUFFER LIST\r\n");System.Console.Write("###########\r\n\r\n");try{//BufferListbufferList = mDataStream.BufferList;// 4 buffers using external buffer modeSystem.Console.Write("5.4.2   External buffers\r\n");long iDevicePayloadsize = (long)mDevice.RemoteNodeList["PayloadSize"].Value;System.Console.Write("         payloadsize required for external buffer [bytes]: {0}\r\n", iDevicePayloadsize);IntPtr mUserBuffer = new IntPtr(0);ulong uPayloadSize = mDataStream.IsDefinedPayloadSize ? mDataStream.PayloadSize : (ulong)iDevicePayloadsize;for (int i = 0; i < 4; i++) // 4 buffers using external allocated memory{mUserBuffer = Marshal.AllocHGlobal((int)uPayloadSize); // use Marshal.FreeHGlobal(mUserBuffer) when releasing resourcesLUserBuffer.Add(mUserBuffer);IntPtr pUserObj = new IntPtr(0); // NULL pointer, not usedmBuffer = new BGAPI2.Buffer(mUserBuffer, uPayloadSize, pUserObj);bufferList.Add(mBuffer);System.Console.Write("         add external buffer [{0}]\r\n", i);}System.Console.Write("5.1.10   Announced buffers:       {0} using {1} [bytes]\r\n", bufferList.AnnouncedCount, mBuffer.MemSize * bufferList.AnnouncedCount);}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}try{foreach (KeyValuePair<string, BGAPI2.Buffer> buf_pair in bufferList){buf_pair.Value.QueueBuffer();}System.Console.Write("5.1.11   Queued buffers:          {0}\r\n", bufferList.QueuedCount);}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}System.Console.Write("\r\n");System.Console.Write("CAMERA START\r\n");System.Console.Write("############\r\n\r\n");//START DATASTREAM ACQUISITIONtry{mDataStream.StartAcquisition();System.Console.Write("5.1.12   DataStream started \r\n");}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}//START CAMERAtry{mDevice.RemoteNodeList["AcquisitionStart"].Execute();System.Console.Write("5.1.12   {0} started\r\n", mDevice.Model);}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}//CAPTURE 20 IMAGESSystem.Console.Write("\r\n");System.Console.Write("CAPTURE 20 IMAGES BY IMAGE POLLING USING INTERNAL BUFFERS\r\n");System.Console.Write("#########################################################\r\n\r\n");BGAPI2.Buffer mBufferFilled = null;try{for (int i = 0; i < 20; i++){mBufferFilled = mDataStream.GetFilledBuffer(1000); // image polling timeout 1000 msecif (mBufferFilled == null){System.Console.Write("Error: Buffer Timeout after 1000 msec\r\n");}else if (mBuffer.IsIncomplete == true){System.Console.Write("Error: Image is incomplete\r\n");// queue buffer againmBufferFilled.QueueBuffer();}else{System.Console.Write(" Image {0, 5:d} received in memory address {1:X}", mBufferFilled.FrameID, (ulong)mBufferFilled.MemPtr);System.Console.Write(" size {0} [bytes]\r\n", (ulong)mBufferFilled.MemSize);// queue buffer againmBufferFilled.QueueBuffer();}}}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}System.Console.Write("\r\n");System.Console.Write("CAMERA STOP\r\n");System.Console.Write("###########\r\n\r\n");String sExposureNodeName = "";if (mDevice.GetRemoteNodeList().GetNodePresent("ExposureTime")){sExposureNodeName = "ExposureTime";}else if (mDevice.GetRemoteNodeList().GetNodePresent("ExposureTimeAbs")){sExposureNodeName = "ExposureTimeAbs";}//STOP CAMERAtry{if (mDevice.RemoteNodeList.GetNodePresent("AcquisitionAbort") == true){mDevice.RemoteNodeList["AcquisitionAbort"].Execute();System.Console.Write("5.1.12   {0} aborted\r\n", mDevice.Model);}mDevice.RemoteNodeList["AcquisitionStop"].Execute();System.Console.Write("5.1.12   {0} stopped\r\n", mDevice.Model);System.Console.Write("\r\n");System.Console.Write("         ExposureTime:                   {0} [{1}]\r\n", (double)mDevice.RemoteNodeList[sExposureNodeName].Value, (string)mDevice.RemoteNodeList[sExposureNodeName].Unit);if (mDevice.TLType == "GEV"){if (mDevice.RemoteNodeList.GetNodePresent("DeviceStreamChannelPacketSize") == true)System.Console.Write("         DeviceStreamChannelPacketSize:  {0} [bytes]\r\n", (long)mDevice.RemoteNodeList["DeviceStreamChannelPacketSize"].Value);elseSystem.Console.Write("         GevSCPSPacketSize:              {0} [bytes]\r\n", (long)mDevice.RemoteNodeList["GevSCPSPacketSize"].Value);System.Console.Write("         GevSCPD (PacketDelay):          {0} [tics]\r\n", (long)mDevice.RemoteNodeList["GevSCPD"].Value);}System.Console.Write("\r\n");}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}//STOP DataStream acquisition & release bufferstry{if (mDataStream.TLType == "GEV"){//DataStream StatisticsSystem.Console.Write("         DataStream Statistics \r\n");System.Console.Write("           DataBlockComplete:              {0}\r\n", (long)mDataStream.NodeList["DataBlockComplete"].Value);System.Console.Write("           DataBlockInComplete:            {0}\r\n", (long)mDataStream.NodeList["DataBlockInComplete"].Value);System.Console.Write("           DataBlockMissing:               {0}\r\n", (long)mDataStream.NodeList["DataBlockMissing"].Value);System.Console.Write("           PacketResendRequestSingle:      {0}\r\n", (long)mDataStream.NodeList["PacketResendRequestSingle"].Value);System.Console.Write("           PacketResendRequestRange:       {0}\r\n", (long)mDataStream.NodeList["PacketResendRequestRange"].Value);System.Console.Write("           PacketResendReceive:            {0}\r\n", (long)mDataStream.NodeList["PacketResendReceive"].Value);System.Console.Write("           DataBlockDroppedBufferUnderrun: {0}\r\n", (long)mDataStream.NodeList["DataBlockDroppedBufferUnderrun"].Value);System.Console.Write("           Bitrate:                        {0}\r\n", (double)mDataStream.NodeList["Bitrate"].Value);System.Console.Write("           Throughput:                     {0}\r\n", (double)mDataStream.NodeList["Throughput"].Value);System.Console.Write("\r\n");}if (mDataStream.TLType == "U3V"){//DataStream StatisticsSystem.Console.Write("         DataStream Statistics \r\n");System.Console.Write("           GoodFrames:            {0}\r\n", (long)mDataStream.NodeList["GoodFrames"].Value);System.Console.Write("           CorruptedFrames:       {0}\r\n", (long)mDataStream.NodeList["CorruptedFrames"].Value);System.Console.Write("           LostFrames:            {0}\r\n", (long)mDataStream.NodeList["LostFrames"].Value);System.Console.Write("\r\n");}mDataStream.StopAcquisition();System.Console.Write("5.1.12   DataStream stopped \r\n");bufferList.DiscardAllBuffers();}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0}.\r\n", ex.GetType());System.Console.Write("ErrorDescription: {0}.\r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}System.Console.Write("\r\n");System.Console.Write("RELEASE\r\n");System.Console.Write("#######\r\n\r\n");//Release buffersSystem.Console.Write("5.1.13   Releasing the resources\r\n");try{while (bufferList.Count > 0){mBuffer = (BGAPI2.Buffer)bufferList.Values.First();bufferList.RevokeBuffer(mBuffer);}System.Console.Write("         buffers after revoke:    {0}\r\n", bufferList.Count);foreach (IntPtr mBufferPointer in LUserBuffer){Marshal.FreeHGlobal(mBufferPointer);}System.Console.WriteLine("5.4.2    memory blocks of external buffers deleted");mDataStream.Close();}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}//DEVICE PARAMETER RESETtry{System.Console.Write("5.3.1    Reset ROI parameters\r\n");mDevice.RemoteNodeList["OffsetY"].Value = (long)mDevice.RemoteNodeList["OffsetY"].Min;mDevice.RemoteNodeList["Height"].Value = (long)mDevice.RemoteNodeList["Height"].Max;mDevice.RemoteNodeList["OffsetX"].Value = (long)mDevice.RemoteNodeList["OffsetX"].Min;mDevice.RemoteNodeList["Width"].Value = (long)mDevice.RemoteNodeList["Width"].Max;}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0} \r\n", ex.GetType());System.Console.Write("ErrorDescription: {0} \r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}try{mDevice.Close();mInterface.Close();mSystem.Close();}catch (BGAPI2.Exceptions.IException ex){returnCode = (0 == returnCode) ? 1 : returnCode;System.Console.Write("ExceptionType:    {0}.\r\n", ex.GetType());System.Console.Write("ErrorDescription: {0}.\r\n", ex.GetErrorDescription());System.Console.Write("in function:      {0} \r\n", ex.GetFunctionName());}System.Console.Write("\r\nEnd\r\n\r\n");System.Console.Write("Input any number to close the program:\r\n");Console.Read();return returnCode;}}
}

 


工业相机ROI图像功能的优势

Baumer工业相机的ROI(感兴趣区域)功能具有显著的优势,包括。

1. 提高精度:通过突出图像中的特定感兴趣区域,ROI功能可以使测量和分析更加精确和准确。

2. 减少了处理时间。通过将处理能力集中在图像的特定区域,ROI功能减少了需要处理的数据量,从而使分析和处理时间更快。

3. 提高图像质量。ROI功能可用于裁剪掉图像中不需要的区域,从而获得更高的分辨率和更好的图像质量。

4. 增加灵活性。ROI功能允许用户实时定制感兴趣的区域,能够更有效地监测和分析感兴趣的特定区域。

5. 提高动态范围。ROI功能还可用于提高图像的动态范围,因为它使用户能够调整图像内特定区域的曝光设置。

总的来说,工业相机的ROI功能可以在广泛的工业应用中显著提高成像和分析的准确性、速度和效率。


工业相机ROI功能的行业应用

Baumer工业相机的ROI(感兴趣区域)功能可以有各种场景应用。下面是几个例子。

1. 质量控制和检查。ROI功能可用于聚焦于产品或样品中的某一感兴趣的区域,并捕获高质量的图像进行分析。

2. 机器视觉。在自动化制造过程中,ROI功能可以帮助识别生产线上的特定零件或部件,以便进行检查和分析。

3. 监视和安全。投资回报率功能可用于放大监控视频画面中的特定区域,确保高清晰度地捕捉到任何可疑的活动。

4. 科学研究。在生物技术或材料科学等领域,ROI功能可以帮助研究人员捕捉样品、细胞或材料的详细图像进行分析。

总的来说,ROI功能使工业相机能够捕捉和ROI的特定区域,使其成为各行业的宝贵工具。


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

相关文章

【Unity编辑器】拓展Inspector视图

目录 1、拓展源生组件 2、拓展继承组件 3、组件不可编辑 4、Context菜单 1、拓展源生组件 摄像机就是典型的源生组件。它的局限性就是拓展组件只能加在源生组件的最上面或者最下面&#xff0c;不能插在中间&#xff0c;不过这样也就够了 using UnityEngine; using UnityEd…

js中call、apply、bind方法的用法

call()方法 语法&#xff1a; call([thisObj[,arg1[, arg2[, [,.argN]]]]])定义&#xff1a; 调用一个对象的一个方法&#xff0c;以另一个对象替换当前对象。 说明&#xff1a; call 方法可以用来代替另一个对象调用一个方法。 ​ call 方法可将一个函数的对象上下文从初始…

Node 10 接口

接口 简介 接口是什么 接口是 前后端通信的桥梁 简单理解&#xff1a;一个接口就是 服务中的一个路由规则 &#xff0c;根据请求响应结果 接口的英文单词是 API (Application Program Interface)&#xff0c;所以有时也称之为 API 接口 这里的接口指的是『数据接口』&#…

Codefi基于区块链的开发框架

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Codefi基于区块链的开发框架 Codefi技术是一种基于区块链的开发框架&#xff0c;它提供了一系列工具和服务&#xff0c;帮助开发者轻松构建和管理去中心化应用程序。C…

Linux指令大全——从零入门到实用工具

如果你是一位Linux初学者&#xff0c;可能会被众多的Linux指令淹没在大海中&#xff0c;不知道该从何学起。本文就为你提供了绝对全面的Linux指令大全&#xff0c;涵盖了从入门到精通的各个领域&#xff0c;并附上了详细示范和趣味介绍&#xff0c;让你轻松学习&#xff0c;轻松…

解决:抠图时onnxruntime错误-无法加载“onnxruntime_providers_tensorrt.dll“-错误代码“126”

文章目录 &#xff08;一&#xff09;问题&#xff08;二&#xff09;假装分析&#xff08;三&#xff09;解决 &#xff08;一&#xff09;问题 在这篇&#xff1a;&#x1f517;《探索【Stable-Diffusion WEBUI】的附加功能&#xff1a;图片缩放&抠图》里面&#xff0c;…

Linux 基础语法 -2

如果我们以后再Linux当中 写了一些命名&#xff0c;导致程序我们不能进行操作了&#xff0c;如这个死循环&#xff1a; 他就会一直输出 "hello Linux" &#xff0c;我们就使用 ctrl c 来终止因为程序或者指令异常&#xff0c;而导致我们无法进行指令输入&#xff…

魔兽服务端编译部署NPCBots和 Al机器人模块教程

魔兽服务端编译部署NPCBots和 Al机器人模块教程 大家好,我是艾西。在平时自己一个人玩魔兽的时候是不是会比较无聊,因为游戏机制或副本难度自己一个人无法进行快乐的玩耍。今天艾西教大家编译部署NPCBots和 Al机器人模块,直接一个人玩魔兽也不孤单 首先到GIT去下载ai机器…