【问题标题】:Color levels in OpenCVOpenCV 中的颜色级别
【发布时间】:2014-11-13 15:50:28
【问题描述】:

我想做类似levels function in Photoshop的事情,但是找不到合适的openCV函数。

基本上,我想将图像中的灰色从几乎白色延伸到几乎黑色,而不是从几乎白色到略带灰色,同时将白色保留为白色,将黑色保留为黑色(我使用的是灰度图像)。

【问题讨论】:

  • 没错。 OpenCV要好得多! =)
  • 等等,如果 photoshop 不是 opencv,这能解释为什么我的代码无法编译吗?

标签: opencv


【解决方案1】:

我认为这是一个将输入级别映射到输出级别的函数,如下图所示。

例如橙色曲线是从(a,c)到(b,d)的直线,蓝色曲线是从(a,d)到(b,c)的直线,绿色曲线是非- 从 (a,c) 到 (b, d) 的线性函数。

我们可以将蓝色曲线定义为 (x - a)/(y - d) = (a - b)/(d - c)。 a、b、c 和 d 的限制值取决于您应用此转换的通道支持的范围。对于灰度,这是 [0, 255]。

例如,如果您想要对灰度图像进行类似 (a, d) = (10, 200), (b, c) = (250, 50) 的变换,

y = -150*(x-10)/240 + 200 对于 x [10, 250]

y = x 表示 [0, 10) 和 (250, 255] 如果您希望其余值保持不变。

您可以使用 OpenCV 中的查找表LUT 函数)来计算输出级别并将此转换应用于您的图像或特定通道。您可以通过这种方式应用任何分段变换。

【讨论】:

  • 查找表,然后。我希望有一个不涉及他们的答案。
【解决方案2】:

以下 python 代码完全实现了 Photoshop 调整 -> 色阶对话框。

将每个通道的值更改为所需的值。

imgnp.uint8类型的输入rgb图像。

inBlack  = np.array([0, 0, 0], dtype=np.float32)
inWhite  = np.array([255, 255, 255], dtype=np.float32)
inGamma  = np.array([1.0, 1.0, 1.0], dtype=np.float32)
outBlack = np.array([0, 0, 0], dtype=np.float32)
outWhite = np.array([255, 255, 255], dtype=np.float32)

img = np.clip( (img - inBlack) / (inWhite - inBlack), 0, 255 )                            
img = ( img ** (1/inGamma) ) *  (outWhite - outBlack) + outBlack
img = np.clip( img, 0, 255).astype(np.uint8)

【讨论】:

  • 这是正确答案。使用 inBlack 和 outBlack 值足以获得所需的效果。谢谢@iperov!
【解决方案3】:

我不知道“Photoshop 级别”是什么。但从描述来看,我认为你应该尝试以下方法:

  1. 使用 cvtColor 将图像转换为 YUV。 Y 将代表强度平面。 (您还可以使用 Lab、Luv 或任何具有单独强度分量的类似色彩空间)。
  2. 使用split 分割平面,使强度平面成为单独的图像。
  3. 在强度平面上调用equalizeHist
  4. 使用merge 将平面重新合并在一起

关于直方图均衡的详细信息可以找到here

另外请注意,有一种改进的直方图均衡方法的实现 - CLAHE(但我找不到比 this 更好的链接,@berak 还建议了一个很好的 link 关于该主题的链接)

【讨论】:

  • this 可能是 CLAHE 的缺失链接
  • 我正在使用灰度图像,如果这有什么改变的话。我想这意味着我不必转换,拆分然后合并,对吗?只是 equalizeHist 位。
  • 不幸的是,equalizeHist 似乎吞噬了我图像中的一些颜色。以前有几种很浅的灰色,现在只有黑色和很少的深灰色,所以我不能用。
  • 再说一遍,您也可以尝试使用 CLAHE,它是全局直方图均衡的“自适应”替代方案。
猜你喜欢
  • 2021-05-20
  • 2011-12-18
  • 1970-01-01
  • 2015-10-22
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
相关资源
最近更新 更多