opencv学习之读取图像-imread函数
序
想要完整全面地学习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定义 | 说明 |
|---|---|---|
| IMREAD_UNCHANGED | Python: cv.IMREAD_UNCHANGED | 如果设置,则按原样返回加载的图像(使用Alpha通道,否则会被裁剪) |
| IMREAD_GRAYSCALE | Python: cv.IMREAD_GRAYSCALE | 如果设置,则始终将图像转换为单通道灰度图像(编解码器内部转换)。 |
| IMREAD_COLOR | Python: cv.IMREAD_COLOR | 如果设置,请始终将图像转换为3通道BGR彩色图像。 |
| IMREAD_ANYDEPTH | Python: cv.IMREAD_ANYDEPTH | 如果设置,则在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。 |
| 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的方向标志旋转图像。 |
imread函数使用示例
#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
opencv学习之读取图像-imread函数的更多相关文章
- openCV学习——一、图像读取、显示、输出
openCV学习——一.图像读取.显示.输出 一.Mat imread(const string& filename,int flags=1),用于读取图片 1.参数介绍 filename ...
- [OpenCV学习笔记3][图像的加载+修改+显示+保存]
正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...
- OpenCV学习笔记(10)——图像梯度
学习图像梯度,图像边界等 梯度简单来说就是求导. OpenCV提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr和Lapacian.Sobel,Scharr其实就是求一阶或二阶导. ...
- OpenCV学习笔记(7)——图像阈值
简单阈值,自适应阈值,Otsu's二值化等 1.简单阈值 当像素值高于阈值时,我们给这个像素赋予一个新值,否则给他赋予另一个值.这个函数就是cv2.threshhold().这个函数的第一个参数就是原 ...
- OpenCV学习:改变图像的对比度和亮度
本实例演示简单地改变图像的对比度和亮度,使用了如下线性变换来实现像素值的遍历操作: The parameters α > 0 and β often called the gain and bi ...
- opencv学习笔记(六)---图像梯度
图像梯度的算法有很多方法:sabel算子,scharr算子,laplacian算子,sanny边缘检测(下个随笔)... 这些算子的原理可参考:https://blog.csdn.net/poem_q ...
- OpenCV 学习(计算图像的直方图)
OpenCV 计算图像的直方图 计算图像的直方图是图像处理领域一个非经常见的基本操作. OpenCV 中提供了 calcHist 函数来计算图像直方图.只是这个函数说实话挺难用的,研究了好久才掌握了些 ...
- OpenCV学习笔记(3)——图像的基本操作
获取图像的像素值并修改 获取图像的属性(信息) 图像的ROI() 图像通道的拆分及合并 1.获取并修改像素值 先读入图像装入一个图像实体,然后该实体相当于一个多维list,可以直接用数组操作提取像素信 ...
- opencv学习笔记(七)---图像金字塔
图像金字塔指的是同一图像不同分辨率的子图的集合,有向下取样金字塔,向上取样金字塔,拉普拉斯金字塔....它是图像多尺度表达的一种,最主要的是用于图像的分割 向下取样金字塔指高分辨率图像向低分辨率图像的 ...
随机推荐
- Ngrinder 源码之Maven 项目
Ngrinder支持Maven结构的测试脚本.使用ScriptHandlerFactory来个脚本选择处理器handler,目前有JythonScriptHandler, GroovyScriptHa ...
- git下载fastadmin
mac git下载后,环境配置运行会如下图 一 下载相对应系统的node.js https://nodejs.org/en/download/ 安装就是一直下一步.... 二 指令终端.cd 到对应项 ...
- leetcode124二叉树最大路径和
第一选择是将其转化成图用动态规划,但这样还是太麻烦 使用递归的思路,对于当前的节点root,分别求左右孩子到当前节点的单项路径权值最大的路径权值,然后记包含当前节点的路径权值为 path_price= ...
- openerp学习笔记 tree视图增加复选处理按钮
wizard:用于确认或选择 wizard/sale_multi_action.py # -*- encoding: utf-8 -*-from openerp.osv import fields, ...
- java web 开发快速宝典 ------电子书
http://www.educity.cn/jiaocheng/j10259.html 1.2.1 JDk 简介 JDK是Sun公司在1995年推出的一套可以跨操作系统平台编译和运行Java程序的开 ...
- Flyway:数据库版本迁移工具的介绍
目录 Flyway介绍 Flyway的工作模式 Flyway的使用场景 命令行 使用Maven或Gradle插件 migrate clean info validate baseline Java A ...
- MYSQL 中 MyISAM与InnoDB两者之间区别与选择,详细总结,性能对比
1.MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.不 ...
- 阶段3 3.SpringMVC·_03.SpringMVC常用注解_3 PathVariable注解
请求地址都一样,根据不同的请求方式,最终让不同的方法去执行.这就是restfull的风格 如果有两个查询都是get的.那么当前访问 满足条件的就是两个. 用一个占位符 {id} 演示PathVaria ...
- vue-router懒加载
require.ensure(dependencies:String [],callback:function(require),errorCallback:function(error),chunk ...
- 2019.11.06 【每天学点SAP小知识】Day1 - ABAP 7.40新语法
最近看同事使用ABAP新语法贼溜,省了好多的功夫,还在使用老语法的我眼红了. 所以就自己补一补7.40之后语法,能够让自己写代码更顺畅吧. 今天学习内联申明 inline 意思是:当编译器发现某段代码 ...