欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

opencv学习之读取图像-imread函数

程序员文章站 2022-04-08 14:50:23
序 想要完整全面地学习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&apos;t openc the file!" << endl;

        getchar();

    }

    return 0;

}

尾巴

opencv的官方文档document其实是一份非常好的资料,关于opencv的几乎都可以在上面查阅得到,不过缺点就是文档为全英文的,这个需要自己克服一下。


本文由芒果浩明发布,转载需注明来源。
本文链接: