跳转到内容

Balance White Auto#

相机的 Balance White Auto 功能会自动校正所采集到的图像中的色彩偏移。

自动功能的像素数据可以来自一个或多个自动功能 ROI

要手动纠正色彩偏移,请使用 Balance White 功能。

该功能的使用#

启用或禁用 Balance White Auto#

要启用或禁用 Balance White Auto 自动功能:

  1. 至少一个自动功能 ROI 分配给 Balance White Auto 自动功能。
    确保自动功能 ROI 部分或完全与图像 ROI 重叠。
  2. 设置 BalanceWhiteAuto 参数设置为以下工作模式之一:
    • Once:相机调节白平衡,直到红、绿和蓝的平均灰度值相同为止。完成此操作后,或最多经过 30 个计算周期后,相机会将自动功能设置为 Off,并将上一次计算得出的平衡率应用于所有后续图像。
    • Continuous:相机在采集图像时连续调节白平衡。调节过程将连续进行,直到将工作模式设置为 OnceOff
    • Off:禁用Balance White Auto自动功能。BalanceRatio 参数保持上一次自动或手动调整后得到的值。

信息

在以下型号的相机上,无法使用连续操作模式:acA640-120gc、acA640-90gc、acA780-75gc、acA1300-22gc、acA1300-30gc、acA1600-20gc、acA1920-25gc、acA2500-14gc。

运作原理#

自动白平衡分为两个步骤:

  1. 相机会比较红、绿和蓝像素的平均灰度值。它确定具有最高平均灰度值的颜色(即亮度最高的颜色),并将该颜色的 BalanceRatio 参数值设置为 1。
  2. 相机会自动调节其他两种颜色的 BalanceRatio 参数值,直到红、绿和蓝的平均灰度值相同为止。

一种颜色的 BalanceRatio 参数设置为 1,其他两种颜色的该参数设置为 1 到 ≈15.98 之间。

示例:假设图像中的绿色像素具有最高的平均灰度值。如果启用Balance White Auto自动功能,相机将绿色的 BalanceRatio 参数值设置为 1。然后,相机自动调整红色和蓝色的 BalanceRatio 参数值,直到红色、绿色和蓝色的平均灰度值相同为止。比如,新的白平衡参数分量可以是:绿色 = 1、红色 = 1.08789、蓝色 = 2.19678。

信息

  • 要查看红、绿或蓝的 BalanceRatio 参数值,请使用 BalanceRatioSelector 切换到相应的颜色通道。
  • 当相机连续拍摄图像时,自动功能会在经过较短的延迟后生效。前几张图像可能不受自动功能的影响。

示例代码#

ace classic/U/L GigE 相机#

// Select auto function ROI 2
camera.AutoFunctionAOISelector.SetValue(AutoFunctionAOISelector_AOI2);
// Enable the Balance White Auto auto function
// for the auto function ROI selected
camera.AutoFunctionAOIUsageWhiteBalance.SetValue(true);
// Enable Balance White Auto by setting the operating mode to Continuous
camera.BalanceWhiteAuto.SetValue(BalanceWhiteAuto_Continuous);
INodeMap& nodemap = camera.GetNodeMap();
// Select auto function ROI 2
CEnumerationPtr(nodemap.GetNode("AutoFunctionAOISelector"))->FromString("AOI2");
// Enable the Balance White Auto auto function
// for the auto function ROI selected
CBooleanPtr(nodemap.GetNode("AutoFunctionAOIUsageWhiteBalance"))->SetValue(true);
// Enable Balance White Auto by setting the operating mode to Continuous
CEnumerationPtr(nodemap.GetNode("BalanceWhiteAuto"))->FromString("Continuous");
INodeMap& nodemap = camera.GetNodeMap();
// Select auto function ROI 2
CEnumParameter(nodemap, "AutoFunctionAOISelector").SetValue("AOI2");
// Enable the Balance White Auto auto function
// for the auto function ROI selected
CBooleanParameter(nodemap, "AutoFunctionAOIUsageWhiteBalance").SetValue(true);
// Enable Balance White Auto by setting the operating mode to Continuous
CEnumParameter(nodemap, "BalanceWhiteAuto").SetValue("Continuous");
// Select auto function ROI 2
camera.Parameters[PLCamera.AutoFunctionAOISelector].SetValue(PLCamera.AutoFunctionAOISelector.AOI2);
// Enable the Balance White Auto auto function
// for the auto function ROI selected
camera.Parameters[PLCamera.AutoFunctionAOIUsageWhiteBalance].SetValue(true);
// Enable Balance White Auto by setting the operating mode to Continuous
camera.Parameters[PLCamera.BalanceWhiteAuto].SetValue(PLCamera.BalanceWhiteAuto.Continuous);
// Select auto function ROI 2
Pylon.DeviceFeatureFromString(hdev, "AutoFunctionAOISelector", "AOI2");
// Enable the Balance White Auto auto function
// for the auto function ROI selected
Pylon.DeviceSetBooleanFeature(hdev, "AutoFunctionAOIUsageWhiteBalance", true);
// Enable Balance White Auto by setting the operating mode to Continuous
Pylon.DeviceFeatureFromString(hdev, "BalanceWhiteAuto", "Continuous");
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Select auto function ROI 2 */
errRes = PylonDeviceFeatureFromString(hdev, "AutoFunctionAOISelector", "AOI2");
CHECK(errRes);
/* Enable the Balance White Auto auto function */
/* for the auto function ROI selected */
errRes = PylonDeviceSetBooleanFeature(hdev, "AutoFunctionAOIUsageWhiteBalance", 1);
CHECK(errRes);
/* Enable Balance White Auto by setting the operating mode to Continuous */
errRes = PylonDeviceFeatureFromString(hdev, "BalanceWhiteAuto", "Continuous");
CHECK(errRes);

其他相机#

// Select auto function ROI 2
camera.AutoFunctionROISelector.SetValue(AutoFunctionROISelector_ROI2);
// Enable the Balance White Auto auto function
// for the auto function ROI selected
camera.AutoFunctionROIUseWhiteBalance.SetValue(true);
// Enable Balance White Auto by setting the operating mode to Continuous
camera.BalanceWhiteAuto.SetValue(BalanceWhiteAuto_Continuous);
INodeMap& nodemap = camera.GetNodeMap();
// Select auto function ROI 2
CEnumerationPtr(nodemap.GetNode("AutoFunctionROISelector"))->FromString("ROI2");
// Enable the Balance White Auto auto function
// for the auto function ROI selected
CBooleanPtr(nodemap.GetNode("AutoFunctionROIUseWhiteBalance"))->SetValue(true);
// Enable Balance White Auto by setting the operating mode to Continuous
CEnumerationPtr(nodemap.GetNode("BalanceWhiteAuto"))->FromString("Continuous");
INodeMap& nodemap = camera.GetNodeMap();
// Select auto function ROI 2
CEnumParameter(nodemap, "AutoFunctionROISelector").SetValue("ROI2");
// Enable the Balance White Auto auto function
// for the auto function ROI selected
CBooleanParameter(nodemap, "AutoFunctionROIUseWhiteBalance").SetValue(true);
// Enable Balance White Auto by setting the operating mode to Continuous
CEnumParameter(nodemap, "BalanceWhiteAuto").SetValue("Continuous");
// Select auto function ROI 2
camera.Parameters[PLCamera.AutoFunctionROISelector].SetValue(PLCamera.AutoFunctionROISelector.ROI2);
// Enable the Balance White Auto auto function
// for the auto function ROI selected
camera.Parameters[PLCamera.AutoFunctionROIUseWhiteBalance].SetValue(true);
// Enable Balance White Auto by setting the operating mode to Continuous
camera.Parameters[PLCamera.BalanceWhiteAuto].SetValue(PLCamera.BalanceWhiteAuto.Continuous);
// Select auto function ROI 2
Pylon.DeviceFeatureFromString(hdev, "AutoFunctionROISelector", "ROI2");
// Enable the Balance White Auto auto function
// for the auto function ROI selected
Pylon.DeviceSetBooleanFeature(hdev, "AutoFunctionROIUseWhiteBalance", true);
// Enable Balance White Auto by setting the operating mode to Continuous
Pylon.DeviceFeatureFromString(hdev, "BalanceWhiteAuto", "Continuous");
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Select auto function ROI 2 */
errRes = PylonDeviceFeatureFromString(hdev, "AutoFunctionROISelector", "ROI2");
CHECK(errRes);
/* Enable the Balance White Auto auto function */
/* for the auto function ROI selected */
errRes = PylonDeviceSetBooleanFeature(hdev, "AutoFunctionROIUseWhiteBalance", 1);
CHECK(errRes);
/* Enable Balance White Auto by setting the operating mode to Continuous */
errRes = PylonDeviceFeatureFromString(hdev, "BalanceWhiteAuto", "Continuous");
CHECK(errRes);

您也可以使用 pylon Viewer 轻松设置参数。