Mat - The Basic Image Container
Mat
Mat有两部分,矩阵头和指向矩阵的指针
OpenCV使用引用计数系统。每个Mat有各自的头,却有可能共享同一矩阵。复制操作也只是复制头部。
Mat A, C; // 仅创建头部
A = imread(argv[1], IMREAD_COLOR); // 分配内存
Mat B(A); // 拷贝构造函数
C = A; // 赋值操作
所有Mat都指向同一个矩阵,但头部不同。
Mat D (A, Rect(10, 10, 100, 100) ); // 长方形
Mat E = A(Range::all(), Range(1,3)); // 行列边界
上述两个Mat也指向同一个矩阵,头部不同。
如果想复制矩阵,使用cv::Mat::clone()
和cv::Mat::copyTo()
Mat F = A.clone();
Mat G;
A.copyTo(G);
存储方法
OpenCV使用BGR颜色空间
明确创建一个Mat对象
使用cv::Mat::Mat
Mat M(2,2, CV_8UC3, Scalar(0,0,255));
cout << "M = " << endl << " " << M << endl << endl; // 只能用于二维数组
CV_[每项的bit数][符号][类型前缀]C[通道数]
cv::Scalar是四元素double向量,相当于初始化。
大于2维的图像:
int sz[3] = {2,2,2};
Mat L(3,sz, CV_8UC(1), Scalar::all(0));
cv::Mat::create
M.create(4,4, CV_8UC(2));
cout << "M = "<< endl << " " << M << endl << endl;
- 无法初始化值
- 只有原来矩阵比参数指定的矩阵小的时候才会重新分配空间