ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenCV基础部分(Mat、图像视频读取、显示、保存)

2021-09-12 16:03:17  阅读:227  来源: 互联网

标签:视频 读取 VedioCapture 8UC1 矩阵 OpenCV CV Mat


一、Mat类

1.1 Mat类简介

        Mat类是一个储存矩阵数据的容器,包括灰度、向量、矩阵、彩色图像等数据。Mat类分为矩阵头和指向存储数据的矩阵指针两部分。

矩阵头:

矩阵尺寸:

存储方法:

地址:

引用次数:

        而图像传递和复制过程中,主要开销是存放矩阵数据,在Opencv中复制和传递图像时,只是复制了矩阵头和指向存储数据的指针。

1.2 构造函数

Mat类还可以存储double、float、uchar、unsigned char数据类型

如: Mat A= Mat<double>(3,3);

Mat A;//创建了一个名称是A的矩阵头   用于保存读取数据的结果和某个·函数的输出结果

Mat B(A);

Mat B.clone(A);//数据域不同了

Mat B(A,Range(x1,x2),Range(y1,y2));

Mat A(640,480,CV_8UC1);//知道尺寸和数据类型时用,比如:内参矩阵、旋转矩阵

Mat A(Size(480,640),CV_8UC1);

Mat的数据类型:

CV_8U: 8位无符号整数                 CV_16U: 16位无符号整数

CV_8S: 8位有符号整数                 CV_16S: 16位有符号整数

CV_32S: 32位有符号整数             CV_32F: 32位浮点整数

CV_64F: 64位浮点整数

通道数:C1、C2、C3、C4分别代表单、双、三、四通道

例如:CV_8UC1

赋值:

Scalar(0,0,255);给每个像素的3个通道分别赋值

Mat A(Size(480,640),CV_8UC3,Scalar(0,0,255));

直接赋值:Mat a=Mat<double>(3,3) <<1.0,2.0);

循环赋值:

for(int i=0;i<c.rows;i++)

        for(int j=0;j<c.cols;j++)

        {

             c.at<int>(i,j)=i+j;

        }

类方法赋值:

A=Mat::eye(640,480,CV_8UC1);

A=Mat::ones(640,480,CV_8UC1);

A=Mat::zeros(640,480,CV_8UC1);

B=Mat::diag(A);//A是1维矩阵

1.3 运算

        加减运算:为了给图像滤波、增强等操作。乘除:卷积

加减运算:两个矩阵的数类型要相同,常数结果保持与Mat类型相同

普通乘法:k=a*b;

内积:k=a.dot(b);

位乘:k=a.mul(b);

        这三种运算,不解释。

1.4 元素读取

        首先,Mat的存储是第一个元素的三个通道存储完成后再去存储后面的。

Mat类的属性 

cols:列数                rows:行数          step:以字节为单位的矩阵宽度

elemSize():每个元素的字节数        total():矩阵中元素的个数

channels():  矩阵的通道数       

四种方式读取:

1.通过at方法

2.通过ptr指针

3.通过迭代器

4.通过矩阵元素的地址

二、图像的读取、显示、保存·

2.1 imread

Mat imread(filename,int flags)

参数二说明:flags常用几种方式

-1:带透明度        0:灰度                  1:BGR

2.2 imshow和namedWindow

namedWindow("窗口名称",int flags=WINDOW_AUTOSIZE);

flags的常用参数:

WINDOW_NORMAL :用户可以随意调整窗口大小

WINDOW_AUTOSIZE:自动适应图像大小,不允许修改

其他参数自行查找

imshow("窗口名称",Mat对象);

waitKey(0);

destroyWindow();//关闭指定名称的窗口

destroyALLWindows();//关闭所有窗口

2.3 imwrite

bool imwrite(filename,InputArray img,vector<int> &params = vector<int> ());

params:保存图片格式属性设置标志

CV_16U:png、jpeg、tiff

CV_32F

4通道

第三个参数的具体设置,不详细说明.

第三个参数一般不需要写,特殊情况才写

三、视频的读取、显示、保存

3.1 视频加载

1.VedioCapture类

VedioCapture::VedioCapture();//默认构造函数

VedioCapture::VedioCapture(filename,int 属性);//默认构造函数

属性:编码格式,参是否调用OpenNI

以上只是将视频文件加载到了VedioCapture中,还需要赋值给Mat,

video>>frame

2.VedioCapture方法

bool isOpened();判断是否读取成功

open("文件名")

get();获取像素尺寸、帧数、帧率。具体参数不讲

3.2 摄像头调用

3.3 视频数据䣌保存

VedioWriter(filename,int fourcc,double fps,Size frameSize,bool isColor=true);

参数2:视频编码格式

参数3:帧率,视频中每秒图像的张数

参数4:视频帧的尺寸

参数5:保存视频是否是彩色视频

四、XML和YMAL

有空再议

标签:视频,读取,VedioCapture,8UC1,矩阵,OpenCV,CV,Mat
来源: https://blog.csdn.net/qq_42475191/article/details/120249320

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有