opencv Mat创建图像

来源:互联网 发布:炉石淘宝买卡背 编辑:程序博客网 时间:2024/05/21 14:58

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;//蓝色通道}}


0 0
原创粉丝点击