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");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值