OpenCV基础(一) 数据类型及常用函数

基本数据类型

OpenCV有很多基本数据类型,其中比较基本的有四种,

CvPoint,是一个包含integer成员x和y的简单结构体,有两种变体类型CvPoint2D32f和CvPoint3D32f.

CvSize,是一个包含integer成员width和height的简单结构体,如果希望使用浮点类型,可以选用其变体类型CvSize2D32f.

CvRect类型派生于CvPoint和CvSize,包含4个数据成员,x,y,width和height.

CvScalar是包含4个integer成员的类型,CvScalar有一个单独的成员val,是一个指向4个双精度浮点数的数组指针.

 

所有以上数据类型的构造函数都有与结构类型一样的名称,其结构如下表

结构体成员说明
CvPointint x, y图像中的点
CvPoint2D32ffloat x, y二维空间中的点
CvPoint3D32ffloat x, y, z三维空间中的点
CvSizeint width, height图像的尺寸
CvRectint x, y, width, height图像的部分尺寸
CvScalardouble val[4]RGBA值

 

矩阵和图像类型

下图中展示的是三种图像的类和层次结构,在使用OpenCV时,会经常用到IplImage的数据类型,是通常所说的对图像进行编码的基本结构,可能是灰度,彩色,4通道(RGBA)的,其中每个通道可以包含任意的整数或浮点数,因此,该类型比常见的RGB图像更通用。

可以看到CvMat由CvArr派生,而又通过CvMat派生出IpImage。在函数原型种,如果看到CvArr*,便可以将CvMat*或IplImage*传递到程序内部。

在多通道的矩阵中,通道是连续的,例如,在一个3通道2维的表示红,绿,蓝矩阵种,矩阵数据如下存储rgbrgbrgb...所以要将该数据类型的指针移动到下一通道,只需要将其增加1,如果需要访问下一个元素集,只需要增加一定的偏移量,使之与通道数相等。

 

IplImage数据结构

typedef struct _IplImage {
    int                  nSize;
    int                  ID;
    int                  nChannels;
    int                  alphaChannels;
    int                  depth;
    char                 colorModel[4];
    char                 channelSeq[4];
    int                  dataOrder;
    int                  origin;
    int                  align;
    int                  width;
    int                  height;
    struct _IplROI*      roi;
    struct _IplImage*    maskROI;
    void*                imageId;
    struct _IplTileInfo* titleInfo;
    int                  imageSize;
    char*                imageData;
    int                  widthStep;
    int                  BorderMode[4];
    int                  BorderConst[4];
    char*                imageDataOrigin;
    }IplImage;

 

OpenCV数据类型

图像像素类型
IPL_DEPTH_8U无符号8位整数(8u)
IPL_DEPTH_8S有符号8位整数(8s)
IPL_DEPTH_16S有符号8位整数(16s)
IPL_DEPTH_32S有符号8位整数(32s)
IPL_DEPTH_32F32位浮点数单精度(32f)
IPL_DEPTH_64F64位浮点数单精度(64f)

 

矩阵和图像操作

函数名称描述
cvAbs计算数组中所有元素的绝对值
cvAbsDiff计算两个数组差值的绝对值
cvAbsDiffs计算数组和标量差值的绝对值
cvAdd两个数组元素级的加运算

cvAdds

一个数组和一个标量元素级的相加运算

cvAddWeighted

两个数组的元素级的加权相加运算(alpha融合)
cvAvg计算数组中所有元素的平均值
cvAvgSdv计算数组中所有元素的绝对值和标准差
cvCalcCovarMartix计算一组n维空间向量的协方差
cvCmp对两个数组中的所有元素运用设置的比较操作
cvCmpS对数组和标量运用设置的比较操作
cvConvertScale用可选的缩放值转换数组元素类型
cvConvertScaleAbs计算可选的缩放值的绝对值之后再转换数组元素的类型
cvCopy把数组中的值复制到另一个数组中
cvCountNonZero

计算数组中非0值的个数

cvCrossProduct计算两个三维向量的向量积(叉积)

cvCvtColor

将数组的通道从一个颜色空间转换另一个颜色空间
cvDotProduct计算两个向量的点积
cvEigenVV计算方阵的特征值和特征向量
cvFlip围绕选定轴旋转
cvGEMM

矩阵乘法

cvGetCol从一个数组的列中复制元素
cvGetCols从数据的相邻的多列中复制元素值
cvGetDiag复制数组中对角线上的所有元素
cvGetDims返回数组的维度
cvGetDimSize返回一个数组的所有维大小
cvGetRow从一个数组的行中复制元素值
cvGetRows

从一个数组的多个相邻的行中复制元素值

cvGetSize

得到二维的数组的尺寸,以CvSize返回

cvGetSubSize从一个数组的子区域复制元素值
cvInRange检查一个数组的元素是否在另外两个数组中的值的范围内
cvInRangeS检查一个数组的元素是否在另外两个标量的范围内
cvInvert求矩阵的转置
cvMahalonobis计算两个向量间的马氏距离
cvMax在两个数组中进行元素级的取最大值操作
cvMaxS在一个数组和一个标量中进行元素级的取最大值操作
cvMerge把几个单通道图像合并为一个多通道图像
cvMin在两个数组中进行元素级的取最小值操作
cvMinS在一个数组和一个标量中进行元素级的取最小值操作
cvMinMaxLoc寻找数组中的最大最小值
cvMul计算两个数组的元素级的乘积
cvNot按位对数组中的每一个元素求反
cvNorm计算两个数组的正态相关性
cvNormalize将数组中的元素进行归一化
cvOr对两个数组进行按位或操作
cvOrS在数组和标量之间进行按位或操作
cvReduce通过给定的操作符将二维数组约简为向量
cvRepeat以平铺的方式进行数组复制
cvSet用给定值初始化数组
cvSetZero

将数组中的所有元素初始化为0

cvSetIdentity将数组中对角线上的元素设为1,其他置0
cvSolve求出线性方程组的解
cvSplit将多通道所组分割成多个单通道数组
cvSub两个数组元素级的相减
cvSubS元素级的从数组减去标量
cvSubRS

元素级的从标量中减去数组

cvSum对数组中的所有元素求和
cvSVD二维矩阵的奇异值分解
cvSVBkSb奇异值回代计算
cvTrace计算矩阵迹
cvTranspose矩阵的转置运算
cvXor对两个数组进行按位异或操作
cvXorS

在数组和标量之间进行按位异或操作

cvZero将所有数组中的元素置为0

在这里推荐一下OpenCV的官方手册网站,可以根据自己的OpenCV环境进行下载使用:

https://docs.opencv.org/

本文参考《学习OpenCV》等资料进行完善、更正,如有侵权,请联系作者删除、更改。

欢迎评论文章,给予宝贵建议,请关注作者,共同学习交流。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值