1、Mat的创建、复制
/*
* Create Mat
*/
Mat M(2, 2, CV_8UC3, Scalar(0, 0, 255)); // 构造函数的一种
cout << "M=" << endl << " " << M << endl << endl;
Mat A;
M.copyTo(A);
M.release();
cout << A << endl; // 释放不影响
Mat B;
B = M.clone();
M.release();
cout << "B=" << endl << " " << B << endl<<endl;
Mat src;
src.create(256, 256, CV_8UC(2));
2、Mat的释放
Mat mat1 = Mat::ones(1, 5, CV_32F);
Mat mat2 = mat1; // 仅创建一个mat2信息头, mat1,mat2 数据区的地址相同
Mat mat3 = Mat::zeros(1, 4, CV_32F);
mat2.release(); // 因为mat2是对mat1的引用,这里的mat2.release()只会清除mat2的信息头和数据指针
mat1.release(); // mat1的数据区都会被释放,但是mat信息头数据还会保存(也就是还能继续被赋值)
cout << mat1 << endl;
cout << mat2 << endl;
cout << mat3 << endl << endl;
mat3.copyTo(mat1);// 拷贝会给mat1从新分配数据区域,其原来的数据区还会保留,即mat2的数据是原来mat1的数据,
//mat1 = mat3.clone(); // 最终结果是mat1和mat3的数据相同,但是数据存储空间不同, mat2存储的是mat1最初的值
mat3.release(); // mat3的释放不会影响mat1
cout << mat1 << endl;
cout << mat2 << endl;
单通道//【14】存取彩色图像的像素 for(int i=0;i<dstDeep1.rows;i++) { for(int j=0;j<dstDeep1.cols;j++) { dstDeep1.at<Vec3b>(i,j)[0]=255;//蓝色通道 dstDeep1.at<Vec3b>(i,j)[1]=255;//红色通道 dstDeep1.at<Vec3b>(i,j)[2]=255;//绿色通道 } }
【14】存取灰度图像的像素 for(int i=0;i<dstDeep1.rows;i++) { for(int j=0;j<dstDeep1.cols;j++) { dstDeep1.at<uchar>(i,j)=255;//蓝色通道 } }