项目场景
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的特定区域,使其成为各行业的宝贵工具。