- Mat M(2,2,CV_8UC3,Scalar(0,0,255));
cout << "M= "<< endl << " "<< M << endl;
M : [0,0,255 0,0,255
0,0,255, 0,0,255 ]
sizeof(M) = 56####
CV_8UC3:
CV_[位数][是否为带符号类型U为Unsigned char][类型前缀]C[通道数]
Scalar 是short向量
使用定制化值来初始化矩阵
还可以用来表示颜色
- 多维矩阵
int sz[]={3,3,3};
Mat L(3,sz,CV_8UC,Scalar::all(0));
——这里编译不能通过??
- IpIImage 指针创建信息头
Ip1Image* img = cvLoadImage("1.jpg",1);
Mat mtx(img);
- 利用Create() 函数
Mat M;
M.create(4,4,CV_8UC(2));
cout << M << endl;
—— 输出4行,205 205 205 205 205 205 205 205
——为什么是 205?
- Matlab式初始化方式
Mat M= Mat::eye(4,4,CV_64F);
cout << M << endl; //单位矩阵
cout << sizeof(M); //还是56 果然是信息头,不包含矩阵
Mat M= Mat::ones(4,4,CV_64F);
cout << M << endl;// 全为1 矩阵
cout << sizeof(M); //56
Mat M= Mat::zeros(4,4,CV_64F);
cout << M << endl;
cout << sizeof(M); //56 全为0
- 使用逗号,对小矩阵分隔式 分别 赋值
Mat M= (Mat_<double>(3,3)<< 0,-1,2,3,4,5,67,8,0);
cout << M << endl;
cout << sizeof(M);
- 通过已经存在的对象创建信息头
Mat M= (Mat_<double>(3,3)<< 0,-1,2,3,4,5,67,8,0);
cout << M << endl;
cout << sizeof(M);
cout << """""""""""""""" << endl;
Mat Rowclone = M.row(1).clone();
cout << Rowclone << endl;
随机方法填充Mat矩阵
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat uR(3,3,CV_8UC3);
cout << uR << endl;
//均匀分布填充
randu(uR, Scalar::all(0), Scalar::all(255));
cout << uR << endl;
Mat nR(3, 3, CV_8UC3);
cout << nR << endl;
randn(nR, Scalar::all(100), Scalar::all(25)); //第一个数字为均值,第二个为标准差
cout << nR << endl;
Mat nR2(3, 3, CV_8UC3);
cout << nR2 << endl;
randn(nR2, Scalar(20,100,150), Scalar(50,25,5)); //第一个数字为均值,第二个为标准差,2个分别对应
cout << nR2 << endl;
waitKey(0);
return 0;
}