Mat的特点

来源:互联网 发布:网络嗅探攻击 编辑:程序博客网 时间:2024/05/23 19:13

转自:http://blog.sina.com.cn/s/blog_a98e39a20101158t.html

// 011Mat的特点.cpp : 定义控制台应用程序的入口点。

// OpenCV函数中输出图像的内存分配是自动完成的(如果不特别指定的话)。 
// 使用OpenCV的C++接口时不需要考虑内存释放问题。
// 赋值运算符和拷贝构造函数( ctor )只拷贝信息头。
 //使用函数 clone() 或者 copyTo() 来拷贝一副图像的矩阵
 
#include "stdafx.h"
#include<opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
 


 //1.以下不拷贝矩阵本身
 Mat A,C;                              // 创建对象时,只创建信息头部分
 A=imread("Lena.jpg");                 //开辟内存


 //2.以下代码中的所有Mat对象最终都指向同一个也是唯一一个数据矩阵。
  //仅信息头不同,对一个操作会影响到所有对象
 Mat B(A);                                          // 使用拷贝构造函数
 C=A;                                              // 赋值运算符
 
 //3.创建只引用部分数据的信息头D
 Mat D (A, Rect(10, 10, 100, 100) );                       //用矩形
 Mat E = A(Range:all(), Range(1,3));                      // 用行列标识边界
 
 //4.以下函数拷贝矩阵本身,现在改变 F 或者 G 就不会影响 Mat 信息头所指向的矩阵
 Mat F = A.clone();
 Mat G;
 A.copyTo(G);
 
 //5. Mat 不但是一个图像容器类,它同时也是一个通用的矩阵类,所以可以用来创建和操作多维矩阵。
// 行数+列数+存储元素的数据类型+每个矩阵点的通道数,每个像素由三个元素组成三通道
// Scalar 是个short型vector。指定这个能够使用指定的定制化值来初始化矩阵
 Mat M(2,2, CV_8UC3, Scalar(0,0,255));   
    cout << "M = " << endl << " " << M << endl << endl;


 //6.传统的lplImage格式也可直接转换为Mat格式
   IplImage* img = cvLoadImage("Lena.jpg", 1);
    Mat mtx(img); // convert IplImage* -> Mat


 //Create() function: 函数
//create创建方法不能为矩阵设初值,它只是在改变尺寸时重新为矩阵数据开辟内存。
  M.create(4,4, CV_8UC(2));                         //2通道
     cout << "M = "<< endl << " "  << M << endl << endl;  
 return 0;
}
0 0
原创粉丝点击