【问题标题】:OpenCV & Python: How to decrease brightness using binary mask?OpenCV 和 Python:如何使用二进制掩码降低亮度?
【发布时间】:2018-08-22 21:33:26
【问题描述】:

我想根据边缘检测到的第二张图像的蒙版使一张图像变暗。

图片 1:原始(灰度)图片

图 2:检测到边缘(用作遮罩)

图 3:显示 cv2.subtract 处理的失败示例

在我的失败示例(图 3)中,我从原始图像中减去了白色像素 (255),但我想做的是 DARKEN 基于原始图像在边缘检测图像的掩码上。

在这篇文章:How to fast change image brightness with python + OpenCV?,比尔盖茨描述了他如何将图像转换为 HSV,拆分然后修改 Value,然后最终合并回来。这似乎是一种合理的方法,但我只想修改掩码为白色的 Value,即边缘存在。

最终,我正在尝试以类似于 FLIR One VividIR 技术的方式增强低分辨率热视频流的边缘。

我相信我已经成为图像处理、OpenCV 和 Python 的完全新手,但在尝试了 OpenCV 提供的几乎所有功能几天后,我陷入了困境。

【问题讨论】:

  • 只有灰度图像?
  • @David 您能否向我们展示您的热视频流用例的示例图像?这可能会使制定解决方案变得更容易。
  • 匿名,热图像有三个通道,但我知道如何拆分它们。如果您仍然感兴趣,Ganesh 很高兴分享图像/视频。我基本上是在为我的 DJI Mavic Pro 无人机配备夜视(复合热和 NIR)功能,而无需支付数千美元的价格标签。

标签: python opencv image-processing


【解决方案1】:
## get the edge coordinates
pos = np.where(edge >0)
## divide 
img[pos] //=2

【讨论】:

  • 它可能很简短,而且,tbh,我不完全理解它为什么有效,但它确实有效!两天……两天我一直在做这件事,结果是两行代码。你们真是太棒了!我猜 numpy 函数最终会得到一个大小相同的布尔数组,其中 >0 的每个实例都变为 True。那么只有当第二个数组(掩码)为真时,第 2 行才必须对原始数组进行除法(这种奇怪的语法,//=2)。非常聪明,效果很好。
  • @Jean-FrançoisFabre 他们认为答案太短了,并且在不检查它是否有效的情况下进行批评......
  • 也许您可以围绕此代码添加更多上下文。 OP似乎理解你,但不是其他人。在这种情况下,我的技巧是为独立代码 sn-p 提供虚假的简单数据,任何人都可以粘贴并查看它是否有效。我也认为你现在删除了更短的答案,看起来像你的,但添加了一些聪明的 cmets。
  • 或者他们只是不喜欢足球:)
猜你喜欢
  • 2015-04-15
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多