OpenCV 用imread函数读入灰度图变成彩色图怎么回事

 我来答
传毅鼠y
2017-02-17 · TA获得超过329个赞
知道答主
回答量:219
采纳率:50%
帮助的人:46.5万
展开全部
在使用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!!!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式