您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页opencv之cv::Mat创建

opencv之cv::Mat创建

来源:五一七教育网

opencv之cv::Mat创建

简介

cv::Mat A, C;                          // 创建矩阵信息头
A = cv::imread(argv[1], IMREAD_COLOR); // 为矩阵分配内存
cv::Mat B(A);                                 // 拷贝构造函数
C = A;                                    // 赋值运算符

注:矩阵A, B, C拥有自己独特的矩阵信息头,但是都指向同一个矩阵。

通过引用计数机制,当计数值为零时,矩阵会自动释放内存

  • 拷贝cv::Mat
cv::Mat F = A.clone();
cv::Mat G;
A.copyTo(G);
  • Output image allocation for OpenCV functions is automatic (unless specified otherwise).
  • You do not need to think about memory management with OpenCVs C++ interface.
  • The assignment operator and the copy constructor only copies the header.
  • The underlying matrix of an image may be copied using the and functions.

创建cv::Mat对象的方法

  • 使用cv::Mat::Mat函数
cv::Mat matrix(2, 2, CV_8UC3, cv::Scalar(0, 0, 255));
cout << "M = " << endl << " " << M << endl << endl;

注:预先定义的通道数可以多达4个,cv::Scalar()既能用来初始化矩阵,也可以用来表示颜色

  • 使用c/c++数组初始化
int sz[3] = {2,2,2};
cv::Mat L(3,sz, CV_8UC, cv::Scalar::all(0));

注:该方法可以用来创建二维以上的矩阵,第一个参数为矩阵的维度,第二个参数为数组的指针,包含每个维度的尺寸。

  • cv::Mat::create函数
M.create(4,4, CV_8UC2);
cout << "M = "<< endl << " "  << M << endl << endl;

注:该方法不能为矩阵设置初始值,只是用于改变矩阵尺寸,为矩阵开辟新的内存。

  • 类似Matlab的方式
cv::Mat E = cv::Mat::eye(4, 4, CV_F);
cout << "E = " << endl << " " << E << endl << endl;
cv::Mat O = cv::Mat::ones(2, 2, CV_32F);
cout << "O = " << endl << " " << O << endl << endl;
cv::Mat Z = cv::Mat::zeros(3,3, CV_8UC1);
cout << "Z = " << endl << " " << Z << endl << endl;
  • 对于小矩阵,使用逗号分隔符初始化
cv::Mat C = (cv::Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
cout << "C = " << endl << " " << C << endl << endl;
C = (cv::Mat_<double>({0, -1, 0, -1, 5, -1, 0, -1, 0})).reshape(3);
cout << "C = " << endl << " " << C << endl << endl;
  • 为已存在的对象创建新信息头
cv::Mat RowClone = C.row(1).clone();
cout << "RowClone = " << endl << " " << RowClone << endl << endl;
  • 为矩阵赋予随机值
cv::Mat R = cv::Mat(3, 2, CV_8UC3);
cv::randu(R, cv::Scalar::all(0), cv::Scalar::all(255));

注:randu()函数的第二三个参数为最小最大值。

参考


转载于:https://www.cnblogs.com/ChrisCoder/p/10211850.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务