Opencv的imread用法
所有参考来自网上仅仅做学习记录用,具体正确性需要在具体项目各自验证,不涉及具体错误代码处理调试等问题,欢迎发现发现问题~
参考:
1. https://blog.csdn.net/LiheZhu/article/details/50485317
2. https://mangoroom.cn/opencv/opencv-learning-imread.html
1.该函数位于Highgui.h和Loadsave.cpp文件中。
Mat imread( const string& filename, int flags ) { Mat img; imread_( filename, flags, LOAD_MAT, &img ); return img; } 接下来看一下imread_函数中关于flags的部分
int type = decoder->type();if( flags != -1 ) { if( (flags & CV_LOAD_IMAGE_ANYDEPTH) == 0 ) type = CV_MAKETYPE(CV_8U, CV_MAT_CN(type)); if( (flags & CV_LOAD_IMAGE_COLOR) != 0 || ((flags & CV_LOAD_IMAGE_ANYCOLOR) != 0 && CV_MAT_CN(type) > 1) ) type = CV_MAKETYPE(CV_MAT_DEPTH(type), 3); else type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1); }
其中,CV_LOAD_IMAGE_XXX定义位于Highgui_c.h文件中
enum // 枚举 (enum) {/* 8bit, color or not */CV_LOAD_IMAGE_UNCHANGED =-1, /* 8bit, gray */ CV_LOAD_IMAGE_GRAYSCALE =0, /* ?, color */ CV_LOAD_IMAGE_COLOR =1, /* any depth, ? */ CV_LOAD_IMAGE_ANYDEPTH =2, /* ?, any color */ CV_LOAD_IMAGE_ANYCOLOR =4 };
由此,我们可以得出如下结论:
flags = -1:imread按解码得到的方式读入图像 // = CV_LOAD_IMAGE_UNCHANGED
flags = 0:imread按单通道的方式读入图像,即灰白图像 // = CV_LOAD_IMAGE_GRAYSCALE
flags = 1:imread按三通道方式读入图像,即彩色图像 // = CV_LOAD_IMAGE_COLOR
2
序
想要完整全面地学习opencv,仅凭阅读samples的示例源码是不够的。毕竟opencv是一个拥有非常多函数的程序库,所以在每学习一个函数时,芒果觉得有必要记录下来,分享给有需要的同学。于是,就有了这一篇的开始,以后的这个就归为opencv函数学习的系列了,篇幅应该都会比较短。
imread函数
imread函数作用
imread函数的作用非常简单,从函数的名称也可以看出来,imread为image read的缩写,即图像读取的意思,。那么imread函数的作用就很明显了,负责读取图像。其实学过matlab的同学就会知道,matlab中也有一个读取图像的函数也命名为imread,这是opencv借鉴了matlab而命名的,因为在opencv1.x时代,加载图像的函数并不叫imread,二是由cvLoadImage函数负责。
imread函数原型
话不多说,先了解imread函数的原型,从opencv的最新document可以查阅到imread原型为
imread c++原型
#include <opencv2/imgcodecs.hpp>
Mat cv::imread ( const String & filename,
int flags = IMREAD_COLOR )
imread python原型
Python:
retval = cv.imread( filename[, flags] )
可以看到,imread函数原型非常简单,可以总结为三点
- 返回值,Mat 类型, 即返回读取的图像,读取图像失败时返回一个空的矩阵对象(Mat::data == NULL)
- 参数1 filename, 读取的图片文件名,可以使用相对路径或者绝对路径,但必须带完整的文件扩展名(图片格式后缀)
- 参数2 flags, 一个读取标记,用于选择读取图片的方式,默认值为IMREAD_COLOR,flag值的设定与用什么颜色格式读取图片有关
参数1 补充:
imread函数支持读取的图像格式有
- Windows bitmaps - .bmp, .dib (always supported)
- JPEG files - .jpeg, .jpg, *.jpe (see the Note section)
- JPEG 2000 files - *.jp2 (see the Note section)
- Portable Network Graphics - *.png (see the Note section)
- WebP - *.webp (see the Note section)
- Portable image format - .pbm, .pgm, .ppm .pxm, *.pnm (always supported)
- PFM files - *.pfm (see the Note section)
- Sun rasters - .sr, .ras (always supported)
- TIFF files - .tiff, .tif (see the Note section)
- OpenEXR Image files - *.exr (see the Note section)
- Radiance HDR - .hdr, .pic (always supported)
- Raster and Vector geospatial data supported by GDAL (see the Note section) Note
参数2 补充:
这些flags值被定义在enum cv::ImreadModes枚举类里面
c++定义 | python定义 | 说明 |
---|---|---|
-1 IMREAD_UNCHANGED | Python: cv.IMREAD_UNCHANGED | 如果设置,则按原样返回加载的图像(使用Alpha通道,否则会被裁剪) |
0 IMREAD_GRAYSCALE | Python: cv.IMREAD_GRAYSCALE | 如果设置,则始终将图像转换为单通道灰度图像(编解码器内部转换)。 |
1 IMREAD_COLOR | Python: cv.IMREAD_COLOR | 如果设置,请始终将图像转换为3通道BGR彩色图像。 |
2 IMREAD_ANYDEPTH | Python: cv.IMREAD_ANYDEPTH | 如果设置,则在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。 |
4 IMREAD_ANYCOLOR | Python: cv.IMREAD_ANYCOLOR | 如果设置,则以任何可能的颜色格式读取图像。 |
IMREAD_LOAD_GDAL | Python: cv.IMREAD_LOAD_GDAL | 如果设置,使用gdal驱动程序加载图像 |
IMREAD_REDUCED_GRAYSCALE_2 | Python: cv.IMREAD_REDUCED_GRAYSCALE_2 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/2。 |
IMREAD_REDUCED_COLOR_2 | Python: cv.IMREAD_REDUCED_COLOR_2 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/2。 |
IMREAD_REDUCED_GRAYSCALE_4 | Python: cv.IMREAD_REDUCED_GRAYSCALE_4 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/4 |
IMREAD_REDUCED_COLOR_4 | Python: cv.IMREAD_REDUCED_COLOR_4 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/4 |
IMREAD_REDUCED_GRAYSCALE_8 | Python: cv.IMREAD_REDUCED_GRAYSCALE_8 | 如果设置,则始终将图像转换为单通道灰度图像,图像尺寸减小1/8。 |
IMREAD_REDUCED_COLOR_8 | Python: cv.IMREAD_REDUCED_COLOR_8 | 如果设置,则始终将图像转换为3通道BGR彩色图像,图像尺寸减小1/8。 |
IMREAD_IGNORE_ORIENTATION | Python: cv.IMREAD_IGNORE_ORIENTATION | 如果设置,请不要根据EXIF的方向标志旋转图像。 |
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
//read the image
Mat image = imread("./clock.jpg");
if (image.data != NULL)
{
//show the image
imshow("clock", image);
waitKey(0);
}
else
{
cout << "can't openc the file!" << endl;
getchar();
}
return 0;
}
尾巴
opencv的官方文档document其实是一份非常好的资料,关于opencv的几乎都可以在上面查阅得到,不过缺点就是文档为全英文的,这个需要自己克服一下。
本文由芒果浩明发布,转载需注明来源。 本文链接:https://mangoroom.cn/opencv/opencv-learning-imread.html
转载于:https://www.cnblogs.com/MCSFX/p/11337448.html
Opencv的imread用法相关推荐
- OpenCV Mat主要用法(1)
Mat 为OpenCV中的核心数据结构,主要负责图像数据的保存,Mat创建方法有很多种 Mat构造函数 可以使用Mat构造函数,创建Mat,Mat构造函数有多种形式的参数,来满足要求 Mat 主要构造 ...
- 关于OpenCV中常见函数用法总结
关于OpenCV中常见函数用法总结 一 一般Mat的赋值操作 二 求Mat中的最大值以及最小值 三 randn()函数给图像添加高斯噪声 四 mean()函数的用法 五 系统计时器 六 矩阵之间的四则 ...
- OpenCV cv::split用法的实例(附完整代码)
OpenCV cv::split用法的实例 OpenCV cv::split用法的实例 OpenCV cv::split用法的实例 #include <iostream> #include ...
- OpenCV cv::reduce用法的实例(附完整代码)
OpenCV cv::reduce用法的实例 OpenCV cv::reduce用法的实例 OpenCV cv::reduce用法的实例 #include <iostream> #incl ...
- OpenCV cv::merge用法的实例(附完整代码)
OpenCV cv::merge用法的实例 OpenCV cv::merge用法的实例 OpenCV cv::merge用法的实例 #include <iostream> #include ...
- OpenCV Mat主要用法(2)_MatExpr
在<OpenCV Mat主要用法(1)>主要是详细分析了Mat类中的主要Method用法,可以了解到Mat中常用的创建,访问,变量等一些方法,但是有时候还远远不够.OpenCV Mat主要 ...
- Opencv使用imread函数时,读到的数据为空
问题描述:使用opencv的imread函数时,读到的数据为空. 程序: Mat img;string namepic="street.png";img = imread(name ...
- opencv Mser的用法
opencv Mser的用法 delta it compares (size_i − size{i−delta}) / size_{i−delta}, default 5 _min_area prun ...
- c++ opencv函数putText用法详解
c++ opencv函数putText用法详解 #include <stdio.h> #include <iostream> #include <opencv2/open ...
最新文章
- 这 17 个 JVM 参数,高级 Java 必须掌握!
- [BX] 和 loop 指令---汇编学习笔记
- Hyperledger Fabric 1.0 实战开发系列 第二课 Fabric环境搭建
- 加载gif_搞笑gif:这啥情况啊?笑容加载不出来了?
- 【读书笔记】原型模式代码(C++) 第一版
- 性能测试之LoardRunner 手动关联二
- VS2008创建win32动态链接库图文流程
- 小爱同学控制ESP8266点灯
- Excel表格常用快捷键大全
- Markdown学习指南
- Knowledge 7一阶谓词逻辑-Generalized Modus Ponens规则
- Oracle如何导出存储过程
- C# MemcachedHelper 帮助类 控制台程序
- kobo glo刷安卓
- 等级保护体系及信息安全管理系统
- 电子健康档案在国外的一些实践
- 黎明职业大学计算机教研室主任,黎明职业大学计算机系相关专业.doc
- docker exec -it container1 /bin/bash 异常
- 核磁谱图分析步骤_核磁一般氢谱和碳谱的解析步骤
- 向oracle中插入图片和读取图片
热门文章
- 如何用更小的成本去更远的地方
- 我PCT国际专利申请量跃居世界第三
- 利用系统自带命令杀毒——手动杀毒
- linux命令行杀毒工具,Linux下杀毒软件Clamav的安装和使用
- 朋友圈新浪微博技术方案.md
- TOP100summit分享实录 | 服务快消品牌的数字营销解决方案
- @Retryable和@Recover的使用踩坑记录
- php fopen函数php,php fopen函数用法(打开创建文件)_PHP教程 - fopen
- xmpp服务器性能测试,使用JMeter测试XMPP聊天服务器
- explain mysql怎么用_mysql中explain用法详解