OpenCV 用imread函数读入灰度图变成彩色图怎么回事
1个回答
展开全部
在使用OpenCV的C++编程的时候遇到了这样的情况,当我用:
[cpp] view plain copy
img = imread("F:\\My_Desktop\\data\\gesture_frame\\test\\1\\1\\0.jpg");
语句读入该路径下面的0.jpg这张灰度图像的时候,再用img.channel()输出图片的通道数,惊奇地发现输出的结果是3而不是1。
查看了imread函数的原始定义如下:
[cpp] view plain copy
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
这时候才恍然大悟,当我们在使用imread()函数而没瞎睁有给出第二个磨宏岁参数的时候,第二个参数的默认值是IMREAD_COLOR,即默认读入的图片是彩色图片。
当我把上面读入的img图片的每个通道的值都输出来的时候,发现每个像素的三个通道的值都是相等的,也就是说,0.jpg虽然是一张灰度图片,但是默认以彩色的方式读绝派入,所以三个通道的值都取了该像素对应的灰度值。
所以~~正确的读入灰度图的方式是:
[cpp] view plain copy
img = imread("F:\\My_Desktop\\data\\gesture_frame\\test\\1\\1\\0.jpg",0);
即使0.jpg本来就是一张灰度图,还是得让第二个参数等于0!!!
[cpp] view plain copy
img = imread("F:\\My_Desktop\\data\\gesture_frame\\test\\1\\1\\0.jpg");
语句读入该路径下面的0.jpg这张灰度图像的时候,再用img.channel()输出图片的通道数,惊奇地发现输出的结果是3而不是1。
查看了imread函数的原始定义如下:
[cpp] view plain copy
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
这时候才恍然大悟,当我们在使用imread()函数而没瞎睁有给出第二个磨宏岁参数的时候,第二个参数的默认值是IMREAD_COLOR,即默认读入的图片是彩色图片。
当我把上面读入的img图片的每个通道的值都输出来的时候,发现每个像素的三个通道的值都是相等的,也就是说,0.jpg虽然是一张灰度图片,但是默认以彩色的方式读绝派入,所以三个通道的值都取了该像素对应的灰度值。
所以~~正确的读入灰度图的方式是:
[cpp] view plain copy
img = imread("F:\\My_Desktop\\data\\gesture_frame\\test\\1\\1\\0.jpg",0);
即使0.jpg本来就是一张灰度图,还是得让第二个参数等于0!!!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询