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!!!
东莞大凡
2024-11-19 广告
2024-11-19 广告
作为东莞市大凡光学科技有限公司的工作人员,对于halcon标定板有所了解。Halcon标定板是高精度相机标定的关键工具,通常采用实心圆点或方格作为标志点。我们公司提供的halcon标定板,具有高精度、稳定可靠的特点,适用于机器视觉领域的各种...
点击进入详情页
本回答由东莞大凡提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询