opencv常用api简单分析: imread()

Posted arvik

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv常用api简单分析: imread()相关的知识,希望对你有一定的参考价值。

原型
Mat imread( const String& filename, int flags )

参数
filename 想要读取/加载的图片文件名称
flags 标志位,该标志位影响imread最终读取图片转换成Mat的数据存储形式。它的取值限于枚举类ImreadModes中。默认值IMREAD_COLOR

enum ImreadModes 
       IMREAD_UNCHANGED            = -1, //如果设置,则返回的数据带有alpha通道(R,G,B,A 四个通道),否则没有alpha通道
       IMREAD_GRAYSCALE            = 0,  //如果设置,则将图像转换为单通道灰度图像
       IMREAD_COLOR                = 1,  //如果设置,则将图像转换成3通道BGR彩色图像
       IMREAD_ANYDEPTH             = 2,  //如果设置,则在输入具有相应深度时返回16位/32位图像,否则将其转换为8位
       IMREAD_ANYCOLOR             = 4,  //如果设置,则图像可能以任何颜色格式读取
       IMREAD_LOAD_GDAL            = 8,  //如果设置,使用gdal驱动程序加载图像
       IMREAD_REDUCED_GRAYSCALE_2  = 16, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/2
       IMREAD_REDUCED_COLOR_2      = 17, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/2
       IMREAD_REDUCED_GRAYSCALE_4  = 32, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/4
       IMREAD_REDUCED_COLOR_4      = 33, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/4
       IMREAD_REDUCED_GRAYSCALE_8  = 64, //如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/8
       IMREAD_REDUCED_COLOR_8      = 65, //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/4
       IMREAD_IGNORE_ORIENTATION   = 128 //如果设置,不会根据EXIF的方向标志旋转图像
     ;

IMREAD_UNCHANGED标志决定了是否有alpha通道

注意

  • 色彩通道
    灰度图通常都是8 bit的像素深度, 通道数为1
    彩色RGB图一般是24bit的像素深度通道数为3
    32bit的彩色图一般包含RGBA四个通道,其中A表示的是透明度索引
    其他彩色图(16bit或者32bit)压缩RGB格式或者YUV格式,通道数为2,需要手动分离

  • 存放顺序
    默认是BGR的顺序依次存放到0,1,2通道中

  • 数据存储
    读入的数据被存入一个二维数组中, 图像数据占用的内存大小为(单位:字节) rows * cols * depthrows是图像像素的行数 cols是图像像素的列数 depth是图像颜色深度,灰度图一般是1 ,RGB图一般是3

样例

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>

using namespace cv;

int main()
    cv::Mat img1 = cv::imread("./test1.jpg");
    cv::Mat img2 = cv::imread("./test1.jpg", IMREAD_GRAYSCALE);
    cv::Mat img3 = cv::imread("./test1.jpg", IMREAD_COLOR);
    cv::Mat img4 = cv::imread("./test1.jpg", IMREAD_REDUCED_GRAYSCALE_2);
    cv::Mat img5 = cv::imread("./test1.jpg", IMREAD_REDUCED_COLOR_4);

    cv::imshow("默认",img1);
    cv::imshow("单通道灰度图",img2);
    cv::imshow("brg彩图",img3);
    cv::imshow("1/2 单通道灰度图",img4);
    cv::imshow("1/4 brg彩图",img5);
    cv::waitKey();
    return 0;

效果

以上是关于opencv常用api简单分析: imread()的主要内容,如果未能解决你的问题,请参考以下文章

opencv常用api简单分析:几个基本绘图操作(LineRectangleCircleEllipse...)

opencv常用api简单分析:几个基本绘图操作(LineRectangleCircleEllipse...)

OpenCV - imread(),imwrite()增加png的大小?

opencv入门项目——车道线检测

OpenCV入门笔记 图片的文件操作

opencv简单卷积运用