OpenCV灰度图与其变变换
参考
https://blog.csdn.net/dddxxxx/article/details/51941990
https://www.zhihu.com/question/21593044
前言
实际中发现:
IMREAD_GRAYSCALE
与COLOR_BGRA2RGBA
所得灰度图是不同的。
即imread(xx.jpg,0)
或 imread(xx.jpg,IMREAD_GRAYSCALE)
与
cvtColor(src, gray, COLOR_BGR2GRAY);
得到不一样的灰度图。
解释
先看
cvtColor
官方文档的说明:
可以看到RGB通道变换到灰度影像时个通道的权重不同。
为什么变换公式是非等权的呢。
在网上找了些资料,个人比较信服的解释是:
人眼对绿色的敏感度最高,对红色的敏感度次之,对蓝色的敏感度最低,因此使用不同的权重将得到比较合理的灰度图像。实验和理论推导得出 0.299、 0.587、 0.114。再看
imread
的官方文档说明:
In the case of color images, the decoded images will have the channels stored in B G R order.
可以看出彩色影像存入mat中是按照BGR的顺序存储的。
但进行imread(xx.jpg,IMREAD_GRAYSCALE)
要求读入灰度影像时,BGR三个通道获得灰度的方式就不知道了(没有追源码)但它确实与cvtColor
变换的公式不同,可能各通道是等权处理的把。