OpenCV之Mat

简介: OpenCV之Mat

 基本类Mat包含两部分数据:矩阵头和指向矩阵的指针。矩阵头包含矩阵的大小、存储方法以及矩阵存储的地址。矩阵包含像素值,取决于存储方式。矩阵头的大小是一个常量,矩阵的大小取决于存储的图片。


   每个Mat对象都有自己的矩阵头,矩阵则在不同对象之间共享,只要矩阵指针指向相同的地址就可以。


1、拷贝矩阵头和矩阵指针


// 创建矩阵头:(没有构造函数分配内存,并无实际数据)
Mat A,C;
// 分配内存
A = imread(argv[1], CV_LOAD_IMAGE_COLOR);
// 只是复制矩阵头和矩阵指针,数据本身不会复制
C=A;
// 创建矩阵头仅仅指向整块数据的一个子区域(ROI)
Mat D(A, Rect(10,10,100,100));    // 使用矩形区域创建
Mat E = A(Range::all(),Range(1,3));   // 使用行和列来创建

   一块矩阵属于多个Mat对象,最后使用这块数据的Mat对象清除 。


2、拷贝矩阵


Mat F = A.clone();
Mat G = A.copyTo(G)

3、创建和初始化Mat


#include<cv.h>
#include<highgui.h>
using namespace cv;
using namespace std;
int main(){
    /*  使用Mat构造函数创建  */
    Mat M(2,2,CV_8UC3,Scalar(0,0,255));
    /*  使用数组创建  */
    int size[3] = {2,2,2};
    Mat N(3,sz,CV_8UC3,Scalar::all(0));
    /*  使用IplImage创建  */
    IplImage* img = cvLoadImage("F:/image.jpg",1);
    Mat P(img);
    /*  使用Create()创建  */
    M.create(4,4,CV_8UC(2));
    cout << "Mat = " << endl << M << endl;
    /*  创建固定格式的Mat  */
    Mat O = Mat::zeros(3,3,CV_8UC1);
    Mat E = Mat::ones(2,2,CV_32F);
    Mat F = Mat::eye(4,4,CV_64F);
    /*  创建简单的Mat  */
    Mat C = (Mat_<char>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
    Mat RowClone = C.row(1).clone();
    Mat R = Mat(3,2,CV_8UC3);
    randu(R,Scalar::all(0),Scalar::all(255));
    system("pause");
}


 


相关文章
|
6月前
|
存储 新制造 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)
83 2
|
存储 编译器 数据库
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV核心类型 Mat
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV核心类型 Mat
115 1
|
6月前
|
存储 新制造 开发工具
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C#)
Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C#)
73 0
|
5月前
|
存储 算法 API
OpenCV 3.1.0中的Mat对象使用
OpenCV 3.1.0中的Mat对象使用
38 2
|
5月前
|
存储 编解码 API
【图像文本化】Base64编解码OpenCV4中 Mat 对象
【图像文本化】Base64编解码OpenCV4中 Mat 对象
84 0
|
6月前
|
存储 定位技术 计算机视觉
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
Armadillo与OpenCV矩阵数据mat、vec与Mat的相互转换
|
6月前
|
计算机视觉
OpenCV(四):Mat支持的运算
OpenCV(四):Mat支持的运算
72 0
|
6月前
|
存储 计算机视觉
OpenCV(三):Mat类数据的读取
OpenCV(三):Mat类数据的读取
182 0
|
6月前
|
存储 Android开发 计算机视觉
OpenCV(二):认识Mat容器
OpenCV(二):认识Mat容器
118 0
|
机器学习/深度学习 监控 计算机视觉
测试 opencv-python 中的 mat 和 Umat 处理图像的差异(GPU加速)
测试 opencv-python 中的 mat 和 Umat 处理图像的差异(GPU加速)
1156 0