opencv中图像数据结构总结

本文介绍了OpenCV中的三种主要图像数据结构:CvMat、IplImage和Mat。Mat作为2.0以后引入的新结构,逐渐替代了cvMat和IplImage,其优点在于自动内存管理。CvMat是一种抽象矩阵,适用于向量操作,而IplImage更适合图像处理,其结构包含了图像的起源、数据排列方式等信息。Mat则提供了更便捷的内存管理和矩阵操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

opencv中常见的与图像操作有关的数据结构有Mat,cvMat和IplImage.学习opencv2.0之前的小伙伴可能只接触过cvMat和IplImage。当然在Learn opencv这本经典opencv书中也只介绍到这两种数据结构。在opencv2.0之前,opencv是用纯C编写,在之后加入了C++代码,于是Mat也在这个时候诞生了。现在越来越有趋势取代之前的cvMat和lplImage,相比之下Mat最大的好处就是能够更加方便的进行内存管理,不再需要程序员手动管理内存的释放。

下面我们就来分别介绍三个结构:

CvMat:

在介绍这个结构之前,我们要知道在opencv中没有向量(vector),任何时候需要向量,都只需要一个列矩阵(如果需要一个转置或者共轭向量,则需要一个行矩阵)。然后,CvMat继承于CvArr其次,OpenCV矩阵的概念与我们在线性代数课上学习的概念相比,更抽象,尤其是矩阵的元素,并非只能取简单的数值类型,可以是多通道的值,意思是一个数据单元可以表示几个值,这主要是为了适应表示图像矩阵,毕竟opencv是专门用来处理图像的,在一个图像中,我们知道一个像素点是由三原色构成,这样,在存储图像时,一个矩阵单元就得存储三个值(也可能是一个值或4个值)。

下面我们来看一下cvmat的数据结构:

typedef struct CvMat 
{ 
    int type;         
    int step;          /*用字节表示行数据长度*/
    int* refcount;     /*内部访问*/
    union {
        uchar*  ptr;
        short*  s;
        int*    i;
        float*  fl;
        double* db;
    } data;    /*数据指针*/
     union {
        int rows;
        int height;
    };
    union {
        int cols;   
        int width;
    };
} CvMat; /*矩阵结构头*/

矩阵的创建

CvMat((int rows, int cols, int type, void* data ); /*cvMat构造函数用已有数据data初始化矩阵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值