OPENCV入门教程四:imread函数读入图像
来源:互联网 发布:超星泛雅网络课程 编辑:程序博客网 时间:2024/05/17 01:58
一、目标
学习imread()函数正确读入图像的方式,imread()用不对,对以后的图像处理有很大的影响。
有时候图片是灰度图,但是你用imread()读入后它就变成了彩色图,只不过它的三个通道的值是一样的。
灰度图是单通道的。
彩色图是三通道的(B,G,R),但是彩色图像的三通道的值相同时它也是灰色的。
二、函数说明
函数原型:
Mat imread( const String& filename, int flags = IMREAD_COLOR );
第一个参数是图片的绝对地址
第二个参数表示图片读入的方式(flags可以缺省,缺省时flags=1,表示以彩色图片方式读入图片)
flags>0时表示以彩色方式读入图片
flags=0时表示以灰度图方式读入图片
flags<0时表示以图片的本来的格式读入图片
三、程序代码
C:\Users\lidabao\Desktop\Lena.bmp这是一张彩色图片
C:\Users\lidabao\Desktop\Lena1.bmp这是一张灰度图片
#include "cv.h" // OpenCV 文件头#include "highgui.h"#include "cvaux.h"#include "cxcore.h"#include "opencv2/opencv.hpp"#include "opencv2/imgproc.hpp"#include <iostream>#include <string>using namespace cv;using namespace std;int main(){ Mat image1, image2, image3, image4, image5, image6;//Mat是OpenCV最基本的数据结构,这是定义一个图像矩阵类型 image1 = imread("C:\\Users\\lidabao\\Desktop\\Lena.bmp");//读入图片数据 cout << "原图1的通道数:" << image1.channels() << endl; namedWindow("原图1", WINDOW_AUTOSIZE); // 创建一个窗口 imshow("原图1", image1); // 在窗口中显示图片 image2 = imread("C:\\Users\\lidabao\\Desktop\\Lena1.bmp");//读入图片数据 cout << "原图2的通道数:" << image2.channels() << endl; namedWindow("原图2", WINDOW_AUTOSIZE); // 创建一个窗口 imshow("原图2", image2); // 在窗口中显示图片 image3 = imread("C:\\Users\\lidabao\\Desktop\\Lena.bmp",0);//读入图片数据 cout << "原图3的通道数:" << image3.channels() << endl; namedWindow("原图3", WINDOW_AUTOSIZE); // 创建一个窗口 imshow("原图3", image3); // 在窗口中显示图片 image4 = imread("C:\\Users\\lidabao\\Desktop\\Lena1.bmp",0);//读入图片数据 cout << "原图4的通道数:" << image4.channels() << endl; namedWindow("原图4", WINDOW_AUTOSIZE); // 创建一个窗口 imshow("原图4", image4); // 在窗口中显示图片 image5 = imread("C:\\Users\\lidabao\\Desktop\\Lena.bmp",-1);//读入图片数据 cout << "原图5的通道数:" << image5.channels() << endl; namedWindow("原图5", WINDOW_AUTOSIZE); // 创建一个窗口 imshow("原图5", image5); // 在窗口中显示图片 image6 = imread("C:\\Users\\lidabao\\Desktop\\Lena1.bmp",-1);//读入图片数据 cout << "原图6的通道数:" << image6.channels() << endl; namedWindow("原图6", WINDOW_AUTOSIZE); // 创建一个窗口 imshow("原图6", image6); // 在窗口中显示图片 waitKey(0); // 等待一次按键,程序结束 return 0;}
四、解释
1、省略flags
省略flags表示flags=1;
image1 = imread("C:\\Users\\lidabao\\Desktop\\Lena.bmp");//读入图片数据 cout << "原图1的通道数:" << image1.channels() << endl;
表示以彩色图片方式读入图片
image1.channels() 表示获取image1的通道数
2、flags=1
image3 = imread("C:\\Users\\lidabao\\Desktop\\Lena.bmp",0);//读入图片数据 cout << "原图3的通道数:" << image3.channels() << endl;
表示以灰度图片方式读入图片
image3.channels() 表示获取image3的通道数
2、flags=-1
image5 = imread("C:\\Users\\lidabao\\Desktop\\Lena.bmp",0);//读入图片数据 cout << "原图5的通道数:" << image5.channels() << endl;
表示以原本的格式读入
image5.channels() 表示获取image5的通道数
五、结果
程序运行结果如下:
注意
写程序时要正确的运用imread()函数
1 0
- OPENCV入门教程四:imread函数读入图像
- opencv imread 读入图像为空
- opencv的imread函数无法读取图像
- opencv图像的载入:imread()函数
- OpenCV的imread函数加载图像的完整路径问题
- OpenCV中imread函数
- opencv中imread这个函数不能正确读入图片的解决
- OpenCV 用imread函数读入灰度图变成彩色图(三通道)怎么回事?
- opencv读入图像学习
- opencv 读入图像代码
- Qt5 OpenCV函数 imread()
- opencv imread函数一点心得
- opencv中cvLoadImage函数批量读入大量图像报错
- matlab中imread读入图像的原理是什么?
- opencv读取图像的几个基本函数,imread、namedWindow、imshow、imwrite
- OpenCV图像读入显示另存为
- opencv读入图像和avi
- 【OpenCV学习笔记】【函数学习】十一(读入图像﹑显示图像和保存图像)
- ```C#学习(五)···
- JavaWeb学习总结(十七)——JSP中的九个内置对象
- voc-release5在window下编译总结
- JAVA中String的“==”和equals()浅析
- 在Rxjava+Retrofit 2中检查网络连接和显示加载框
- OPENCV入门教程四:imread函数读入图像
- POJ-1258 Agri-Net 最小生成树(MST)
- 9.fork函数和父子进程共享文件
- Java 两个整数相除保留两位小数,将小数转化为百分数
- 10009---压力测试之badboy和Jmeter的简单使用方法
- 字符串包含
- HDU 1846 Bash博弈
- Android----------短信消息提醒(Notification)
- 在Ubuntu16.04系统下进行冰川上网客户端认证上网