您的位置:首页 > 运维架构

OpenCV 用imread函数读入灰度图变成彩色图(三通道)怎么回事?

2016-05-11 21:24 363 查看
在使用OpenCV的C++编程的时候遇到了这样的情况,当我用:

img = imread("F:\\My_Desktop\\data\\gesture_frame\\test\\1\\1\\0.jpg");


语句读入该路径下面的0.jpg这张灰度图像的时候,再用img.channel()输出图片的通道数,惊奇地发现输出的结果是3而不是1。

查看了imread函数的原始定义如下:

CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
这时候才恍然大悟,当我们在使用imread()函数而没有给出第二个参数的时候,第二个参数的默认值是IMREAD_COLOR,即默认读入的图片是彩色图片。

当我把上面读入的img图片的每个通道的值都输出来的时候,发现每个像素的三个通道的值都是相等的,也就是说,0.jpg虽然是一张灰度图片,但是默认以彩色的方式读入,所以三个通道的值都取了该像素对应的灰度值。

所以~~正确的读入灰度图的方式是:

img = imread("F:\\My_Desktop\\data\\gesture_frame\\test\\1\\1\\0.jpg",0);
即使0.jpg本来就是一张灰度图,还是得让第二个参数等于0!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: