使用 EMGU 相机库,图像根据背景颜色显示 "washed out"

Images appear "washed out" based on background color, using EMGU Camera library

我正在使用 EMGU CV .NET 库。我注意到当我拍摄任何有颜色的东西时,如果背景很暗(大概),颜色通常会变成 "washed out"。我发现的一般经验法则是,背景越暗,颜色越褪色。

下面是我如何使用 EMGU 从相机中检索图像。

Dim imgFeed As Bitmap = mCamera.RetrieveBgrFrame.ToBitmap

在下面的图片中(都裁剪掉了一些背景),左图是在干白水泥上,右图是在湿白水泥上。您可以看到 "washed out" 颜色,尤其是在第一个标签上,它是亮橙色胶带。

这是在阳光下的黑色路面上拍摄的另一张照片,实际上比白色水泥要暗得多,但在颜色上看起来与上面湿水泥图像中的背景相似。

EMGU 库中是否存在某种自动平衡?如果是这样,我可以阻止这种情况发生吗?我需要比背景更清楚地看到颜色。我读过 _EqualizeHist() 并实现了它,但这并没有帮助我更清楚地看到颜色;为图像添加对比度并没有真正帮助,因为颜色已经接近白色。

更新

看了Spark的回答,找到了SetCaptureProperty()的方法。我看到您可以通过将值设置为 0 来禁用自动曝光 属性,如下所示。

mCamera.SetCaptureProperty(CvEnum.CAP_PROP.CV_CAP_PROP_AUTO_EXPOSURE, 0.0)

遗憾的是,对于我正在使用的特定相机,驱动程序似乎不支持更改此 属性。

这与算法无关。这是相机芯片内部自动曝光 (AEC) 算法 运行 的行为。尝试禁用相机的自动曝光控制并降低手动曝光级别。

小理论:大部分AEC算法都采用全帧加权法。因此,在您展示的白色水洗示例中,黑色背景占据了图像的更多部分,这使得 AEC 算法假设图像太暗,从而在内部增加曝光级别。