OpenCV Mat类常用成员属性和成员方法

简介: OpenCV Mat类常用成员属性和成员方法

Mat类


各个参数详解请查看OpenCV官方文档:


https://docs.opencv.org/3.4.8/d3/d63/classcv_1_1Mat.html


Mat常用成员属性


  • data 是指向矩阵数据的uchar类指针,用*解引用后再强转为int可以读到第一个像素数据。


  • dims 矩阵的维度,例如5*6矩阵是二维矩阵,则dims=2,三维矩阵dims=3。


  • rows 矩阵的行数。


  • cols 矩阵的列数。


  • size 矩阵的大小,返回一个向量,二维矩阵即为 行数 x 列数。


Mat常用成员方法


  1. clone() 克隆


//将m0完全拷贝到m1中,同时拷贝m0中的所有数据,且拷贝的矩阵是连续的。
m1 = m0.clone();


  1. copyTo()


// 将m0中的内容拷贝到m1中,如果有必要重新分配m1(等价于m1 = m0.clone())。
m0.copyTo(m1); 
//将m0中,mask所指示的的数据拷贝到m1中。
m0.copyTo(m1, mask);


  1. convertTo()


//将m0中的元素转换成type类(CV_32F等),作scale尺度的缩放,offset偏移,写入m1中。
m0.convertTo(m1, type, scale, offset);


  1. setTo()


//将m0中所有的元素的值设为s;如果使用mask,则只设定mask中的非零元素。
m0.setTo(s,mask);


  1. reshape()


//改变二维矩阵的的实际形状,不进行数据拷贝;若chan或rows为0,则表示不作改变。
m0.reshape(chan, rows);


  1. push_back()


//对mx1矩阵进行扩展,并在末尾插入单一值s。
m0.push_back(s); 
//对mxn矩阵作k行扩展,并将m1拷贝到这些行中;m1的大小为kxn。
m0.push_back(m1);


  1. pop_back()


//从m0尾部移除n行,默认情况下n为1。
m0.pop_back(n);


  1. locateROI()


//将m0的大小重写为size,如果m0重写后变成更大的矩阵,则起始点为cv::Pointoffset点。
m0.locateROI(size, offset);


  1. adjustROI()


//在m0的上下左右分别添加t. `b. ``l. ``r个像素。
m0.adjustROI(t, b, l, r);


  1. total()


m0.total(); //计算所有数组元素的个数,不考虑通道。


  1. isContinuous()


//如果m0所有的行在内存空间中打包时都没有间隙,则返回true。
m0.isContinuous();


  1. elementSize()


m0.elementSize();


  1. elementSize1()


//返回矩阵m0中每个次元素的字节大小(如3通道float型的矩阵则返回4)。
m0.elementSize1();


  1. type()


//返回m0中元素的有效类型标识符(如CV_32FC3)。
m0.type();


  1. depth()


//返回m0中单个通道中元素的有效类型标识符(如CV_32F)。
m0.depth();


  1. channels()


//返回m0中元素的通道数目。
m0.channels();


  1. size()


//以cv::Size对象的形式返回m0的大小。
m0.size();


  1. empty()


//如果数组中没有元素(如m0.total == 0或m0.data == NULL)则返回true。
m0.empty();


Mat类应用简单示例



#include <iostream>
#include <math.h>
#include <opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
  cv::Mat m1(200, 300, CV_16UC3, cv::Scalar(50, 150, 200));
  cout << "*m1.data = " << int(*m1.data) << endl;
  cout << "m1.dims = " << m1.dims << endl;
  cout << "m1.rows = " << m1.rows << endl;
  cout << "m1.cols = " << m1.cols << endl;
  cout << "m1.size = " << m1.size << endl;
  cout << "m1.channels() = " << m1.channels() << endl;
  cout << "m1.type() = " << m1.type() << endl;
  cout << "m1.depth() = " << m1.depth() << endl;
  cout << "m1.elemSize() = " << m1.elemSize() << endl;
  cout << "m1.elemSize1() = " << m1.elemSize1() << endl;
  cout << "m1.step[0] = " << m1.step[0] << endl;
  cout << "m1.step[1] = " << m1.step[1] << endl;
  cout << "m1.step1(0) = " << m1.step1(0) << endl;
  cout << "m1.step1(1) = " << m1.step1(1) << endl;
  namedWindow("result_image", WINDOW_FULLSCREEN);
  imshow("result_image", m1);
  waitKey(0);
  return 0;
}
相关文章
|
3月前
|
存储 新制造 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)
41 2
|
6月前
|
存储 编译器 数据库
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV核心类型 Mat
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV核心类型 Mat
|
4月前
|
计算机视觉 Python
OpenCV获取视频文件的属性并动态显示实战(附Python源码)
OpenCV获取视频文件的属性并动态显示实战(附Python源码)
47 0
|
3月前
|
存储 新制造 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C#)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C#)
29 0
|
4月前
|
存储 定位技术 计算机视觉
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
|
4月前
|
计算机视觉
OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
OpenCV中读取、显示、保存图像及获取图像属性操作讲解及演示(附源码)
124 0
|
4月前
|
计算机视觉
OpenCV(四):Mat支持的运算
OpenCV(四):Mat支持的运算
35 0
|
4月前
|
存储 计算机视觉
OpenCV(三):Mat类数据的读取
OpenCV(三):Mat类数据的读取
86 0
|
4月前
|
存储 Android开发 计算机视觉
OpenCV(二):认识Mat容器
OpenCV(二):认识Mat容器
54 0
|
8月前
|
存储 监控 算法
Baumer工业相机堡盟相机中的JPEG图像压缩相机如何通过BGAPI SDK和OpenCV的Mat进行图像转换(C++)
Baumer工业相机堡盟相机中的JPEG图像压缩相机如何通过BGAPI SDK和OpenCV的Mat进行图像转换(C++)
96 0