【问题标题】:OpenCV darken oversaturated webcam imageOpenCV使过饱和的网络摄像头图像变暗
【发布时间】:2014-03-27 21:02:48
【问题描述】:

我有一个(相当便宜的)网络摄像头,它产生的图像比应有的要轻得多。相机确实有亮度校正 - 从亮到暗时调整很明显 - 但它始终是从远到亮。

我正在寻找一种无需迭代整个帧即可降低亮度的方法(Raspberry Pi 上的 OpenCV Python 绑定)。那存在吗?或者更好的是,是否有向网络摄像头发送提示以降低亮度的标准方法?

import cv2

# create video capture
cap = cv2.VideoCapture(0)
window = cv2.namedWindow("output", 1)

while True:

    # read the frames
    _,frame = cap.read()
    cv2.imshow("output",frame)

    if cv2.waitKey(33)== 27:
        break

# Clean up everything before leaving
cv2.destroyAllWindows()
cap.release()

【问题讨论】:

  • 几个问题:1) 你能用一个显示你在应用中获取图像的位置的 sn-p 来更新你的问题吗?我想看看你拥有的数据的确切来源。此外,发布您的代码也是 SO 的标准做法。 2) 您是否已经在 Raspberry Pi 上安装了 OpenCV (cv2)?这意味着你已经有了 numpy.如果是这样,那么它应该很容易。 3) 你想只是缩小亮度还是做一些更复杂的事情,比如调整伽玛?
  • 代码尚未在 Pi 上运行 - 我目前正在其他地方开发以避免联网。小步骤。 Pi 和桌面都运行 Arch,因此环境应该非常相似。我没有添加代码,因为它会在任何图像捕获中体现出来。似乎“抓取图像->显示图像” sn-p 不会为问题添加任何内容。无论是最好的 - 我可能都想尝试!

标签: python opencv camera webcam


【解决方案1】:

我忘记了 Raspberry Pi 只是运行常规操作系统。多么棒的机器。感谢您提供的代码确认您只有一个普通的 cv2 图像。

简单的矢量化缩放(无需处理每个像素)应该很简单。下面只是缩放每个像素。如果图像有较大的偏移,添加几行来标准化图像会很容易。

import numpy
#...
scale = 0.5  # whatever scale you want
frame_darker = (frame * scale).astype(numpy.uint8)
#...

这看起来像是你想要的开始吗?

【讨论】:

  • 是的,这是一个很棒的小东西!这似乎确实可以完成工作 - 但是,我会接受属性方法,因为它似乎是解决问题的更“官方”方式,并且可以更好地转移到其他语言。谢谢!
  • @KendallV 当然,如果您可以告诉相机为您提供更好的图像,那总是更好的选择。如果您无法从相机中获得可预测的行为,您可以回到这个并添加一些分析。
【解决方案2】:

调整网络摄像头参数的标准方法是 VideoCapture set() 方法(前提是您的摄像头支持该接口。根据我的经验,大多数都是这样)。这避免了自己处理图像的性能开销。

VideoCapture::set

CV_CAP_PROP_BRIGHTNESSCV_CAP_PROP_SATURATION 似乎是您想要的。

【讨论】:

  • 太棒了。我一直在寻找更详细的解释(它似乎在程序关闭后保持效果,即在没有设置选项的情况下重新运行程序,它仍然会使图像变暗)。我只是在 Google 上失败了吗?
  • 我不太清楚它是如何工作的,但我认为它只是调用了 UVC(USB 视频类)协议中的标准函数。也许您的相机有一些非易失性内存来存储以前的设置,或者它可能会更改 USB 设备级别的设置(因此拔出/重新插入设备会清除它)
  • 我在文档中找不到,但它需要浮动... 0.0 最暗100.0 最亮 我能做到告诉。
猜你喜欢
  • 2017-04-03
  • 1970-01-01
  • 2012-06-16
  • 2012-12-20
  • 2012-08-08
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2015-08-18
相关资源
最近更新 更多