一. 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 它们之间的关系
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的一些函数
A. cv::Mat mat = imread(const string* filename); // 读取图像
B. imshow(const string frameName, InputArray mat); // 显示图像
C. imwrite(c