algorithm - OpenCV cvtColor() 使用的是什么灰度转换算法?

标签 algorithm opencv grayscale

OpenCV 中将图像从彩色转换为灰度时,使用什么转换算法?我试图在 GitHub 上的源代码中查找它,但没有任何成功。

亮度法平均最突出和最不突出的颜色:

  (max(R, G, B) + min(R, G, B)) / 2.

average 方法只是对值进行平均:

  (R + G + B) / 3.

光度法是平均法的更复杂版本。它还对值进行平均,但它形成加权平均值以说明人类感知。与其他颜色相比,我们对绿色更敏感,因此绿色的权重最大。

    The formula for luminosity is 0.21 R + 0.72 G + 0.07 B.

下面是一些转换算法的例子: http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale/

最佳答案

彩色转灰度算法在cvtColor() documentation中说明。 . (搜索 RGB2GRAY)。 使用的公式与 CCIR 601 相同:

Y = 0.299 R + 0.587 G + 0.114 B

您提供的光度公式适用于 ITU-R Recommendation BT。 709. 如果你想要,你可以在 cvtColor() 的第三个参数中指定 CV_RGB2XYZ(例如),然后提取 Y channel 。

您可以让 OpenCV 执行您描述的“亮度”方法,方法是执行 CV_RGB2HLS 转换,然后提取 L channel 。我认为 OpenCV 没有针对“平均”方法的转换, 但如果您浏览文档,您会发现还有其他一些可能性。

关于algorithm - OpenCV cvtColor() 使用的是什么灰度转换算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19181323/

相关文章:

algorithm - azure 表上的动态搜索

java - 在 Android 上使用带有 OpenCV 的相机 LED 闪光灯

c - 如何使用 IPP 将 8 位灰度图像转换为 NV12(有限范围)颜色空间

C++ 排序巨大的二进制文件

c# - 将数字转换为字母组合

c# - 从 List<> 中删除重复的项目并记录重复的数量

c# - 将OpenCV C++重写为EmguCV C#-如何使用指针?

python - 尝试使用 matplotlib 绘制 OpenCV 的 MSER 区域

java - RGB到灰度,java中的bmp图像

Java ImageIO 灰度 PNG 问题