opencv实战从0到N (1)—— Mat结构及操作

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

Mat结构及操作

   接触opencv很久,感觉学习的不够系统,所以将之前的零碎的笔记整理一下。

   opencv是一个开源计算机视觉库,其核心为图像处理。Mat则是一个基础的图像容器,作为一个

c++的对象类,我们在使用是不需要担心的内存管理情况,它由由两个数据部分组成:矩阵头(包含矩阵尺寸,

存储方法,存储地址等信息)

和一个指向存储所有像素值的矩阵(根据所选存储方法的不同矩阵可以是不同的维数)的指针。

使用Mat读取图像十分便捷:Mat srcImg = imread("1.jpg");

1,Mat对象创建

1.1 使用Mat() 构造函数

Mat M(2,2, CV_8UC3, Scalar(0,0,255));//对二维多通道图像,要定义行数和列数。

指定存储元素的数据类型以及每个矩阵点的通道数。第三个参数格式如下

CV_[The number of bits per item][Signed or Unsigned][Type Prefix][The channel number]

Scalar 是short型vector。指定这个能用定制值初始化矩阵。

1.2 使用数组初始化Mat对象

int sz[3] = {2,2,2};

Mat L(3,sz, CV_8UC(1), Scalar::all(0));

1.3 调用函数创建

M.create(4,4, CV_8UC(2));

cout << "M = "<< endl << " " << M << endl << endl;

1.4 初始为基础矩阵(单位矩阵,零矩阵等)

Mat E = Mat::eye(4, 4, CV_64F);

Mat n = Mat::ones(2, 2, CV_32F);

Mat Z = Mat::zeros(3,3, CV_8UC1);

1.5 小矩阵初始化

Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);

2, Mat对象的拷贝

2.1浅拷贝

Mat A, C; // 只创建信息头部分

A = imread("src1.BMP", CV_LOAD_IMAGE_COLOR); // 这里为矩阵开辟内存

Mat B(A); // 使用拷贝构造函数

C = A; // 赋值运算符

2.2 ROI设置

Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangle

Mat srcROI = src(Rect(10, 10, 100, 100) );

Mat E = A(Range:all(), Range(1,3)); // using row and column boundaries

Mat RowClone = C.row(1).clone();

2.3 深拷贝

Mat F = A.clone();

Mat G;

A.copyTo(G);

3. ROI 测试

Mat srcImg0 = imread("src.jpg");

imshow("src0", srcImg0);



Mat D(srcImg0, Rect(10, 10, 100, 100));

D = D.mul(2);

imshow("DST", srcImg0);

更多内容关注微信公众号:ML_Study

猜你喜欢

转载自blog.csdn.net/qq_34106574/article/details/93471025