opencv学习之读取图像-imread函数
程序员文章站
2022-06-28 21:15:40
序 想要完整全面地学习opencv,仅凭阅读samples的示例源码是不够的。毕竟opencv是一个拥有非常多函数的程序库,所以在每学习一个函数时,芒果觉得有必要记录下来,分享给有需要的同学。于是,就有了这一篇的开始,以后的这个就归为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的几乎都可以在上面查阅得到,不过缺点就是文档为全英文的,这个需要自己克服一下。
本文由芒果浩明发布,转载需注明来源。
本文链接:
上一篇: [CTSC2017] 吉夫特
下一篇: 厨师长今天开会刚强调了安全问题
推荐阅读
-
荐 opencv学习笔记15: 梯度运算之sobel算子及其函数使用
-
opencv学习之读取图像-imread函数
-
C++ OpenCV学习之图像像素值统计
-
OpenCV2学习笔记之视频流读取与处理
-
Python OpenCV学习之图像滤波详解
-
Python OpenCV机器学习之图像识别详解
-
OpenCV学习之图像的分割与修复详解
-
OpenCV:图像读取函数 imread
-
malab函数imread()、imshow()、subplot()、rgb2gray()、imresize(),读取图像并显示、尺度变换、反色处理
-
OpenCV图像读取(imread) 显示(imshow) 保存(imwrite)的冷知识点