OpenCV 用imread函数读入灰度图变成彩色图(三通道)怎么回事?
2016-05-11 21:24
363 查看
在使用OpenCV的C++编程的时候遇到了这样的情况,当我用:
语句读入该路径下面的0.jpg这张灰度图像的时候,再用img.channel()输出图片的通道数,惊奇地发现输出的结果是3而不是1。
查看了imread函数的原始定义如下:
当我把上面读入的img图片的每个通道的值都输出来的时候,发现每个像素的三个通道的值都是相等的,也就是说,0.jpg虽然是一张灰度图片,但是默认以彩色的方式读入,所以三个通道的值都取了该像素对应的灰度值。
所以~~正确的读入灰度图的方式是:
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!!!
相关文章推荐
- tomcat 异常关闭
- 基于nginx+jwplayer的点播服务器(测试成功)
- Nignx负载均衡存在的seesion问题
- Linux进程
- Linux 异步IO
- OpenGL es 透明问题
- windows 64 位安装xshell5出现的一系列问题
- linux环境变量配置总结
- C#学习网站
- linux环境变量配置总结
- 系统学习Linux系统第一天:5-11
- Linux命令——文件和目录管理
- ecshop二次开发--节日关怀
- OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
- CentOS/RedHat和Debian/Ubuntu安装VMware Tools时无法找到kernel header path的解决方案
- Linux 3.2中回写机制的变革
- Linux 3.2中回写机制的变革
- servlet3 upload上传文件实践
- Linux命令技巧
- Nginx服务器简介