CvArr, CvMat, IplImage, cv::Mat, cv::InputArray

本文详细介绍了OpenCV中几种重要的数据结构CvArr, CvMat, IplImage以及后来引入的cv::Mat和cv::InputArray。内容包括它们的继承关系、相互之间的转换方法,特别是cv::Mat在处理图像数据时的便利性及其与其他结构的无缝配合。" 89518765,5693485,RL环境设计与分析:从迷宫到倒立摆,"['强化学习', '游戏AI', '环境模拟', '深度学习']
摘要由CSDN通过智能技术生成

一. OpenCV中的 CvArr, CvMat, IplImage, cv::Mat, cv::InputArray

1.1 看继承关系

typedef void CvArr;

class Mat;
 
struct CvMat

struct IplImage;

// Proxy datatype for passing Mat's and vector<>'s as input parameters 
class _InputArray
typedef const _InputArray& InputArray;

看定义, 它们并没有继承关系.

1.2 它们之间的关系


A. 我们可以理解为 cv::Mat 把向量, 矩阵, 图像等等都统一了操作. cv::Mat 有更强的矩阵运算能力, 支持常见的矩阵运算. 对图像数据的运算.
B. 我们可以把CvMat 或 IplImage 转化为 cv::Mat 然后进行数据处理.
C. cv::Mat 与 cv::InputArray: Proxy datatype for passing Mat's and vector<>'s as input parameters.

二. 各个说明


2.1 CvArr

typedef void CvArr;
可以认为它是万能指针, 例如某个函数的参数是CvArr*, 在该函数内部会强制转换回该函数要求的数据类型的, 所以你调用该函数时, 传入的类型就必须与该函数要求的类型一致. 否则肯定会报错.

2.2 cv::Mat


我们可以理解为 cv::Mat 把向量, 矩阵, 图像等等都统一了操作.
cv::Mat 有更强的矩阵运算能力, 支持常见的矩阵运算. 对图像数据的运算, 将 CvMat 与 IplImage 类型转化为 cv::Mat 类型可大大提高运算效率.(例如要计算时, 我们可以把CvMat 或 IplImage 浅拷贝为 cv::Mat , 然后计算, 计算完再转回CvMat 或 IplImage )

1).cv::Mat的一些函数


cv::Mat 是一个多维的密集数据数组. 可以用来处理向量和矩阵, 图像, 直方图等等常见的多维数据.
A. cv::Mat mat = imread(const string* filename);    // 读取图像
B. imshow(const string frameName, InputArray mat);  // 显示图像
C. imwrite(c
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值