OpenCv的基本数据类型

wKiom1PsdBHAJjR9AAKEh0wvtkE573.jpg

构造函数一般就是把第一个C变成小写

CvScalar有三个构造函数:1.cvScalar,分别给4个值赋值2.cvRealScalar,给第一个值赋值,其余三个为0 3.cvScalarAll,给所有参数赋一个值

wKiom1PsdB7wSJuyAABlp7LixS8849.jpg

1.CvArr

为抽象基类

2.CvMat

typedef struct CvMat
{
int type; /* CvMat 标识 (CV_MAT_MAGIC_VAL), 元素类型和标记 */
int step; /* 以字节为单位的行数据长度*/
int* refcount; /* 数据引用计数 */
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data; /* data 指针 */
#ifdef __cplusplus
union
{
int rows;
int height;
};
union
{
int cols;
int width;
};
#else
int rows; /* 行数 */
int cols; /* 列数*/
#endif
} CvMat;

创建CvMat:

1.cvMat* cvCreateMat(int rows,int cols,int type);

由cvCreateMatHeader()和cvCreateMatData组成,前者只创建CvMat结构,不分配内存,后者只分配内存

2.cvCloneMat(CvMat *)

释放:

cvReleaseMat(CvMat*)

wKiom1PsdC-Bd0bqAAECI_oZ7Ig037.jpg

wKioL1PsdUnz9iJFAAFYmvV8pFY053.jpg

程序:

#include "cv.h"
#include <stdio.h>
int main()
{
  // Create an OpenCV Matrix containing some fixed data.
  //
  float vals[] = { 0.866025, -0.500000, 0.500000, 0.866025};
   
  CvMat rotmat;
   
  cvInitMatHeader(
    &rotmat,
    2,
    2, 
    CV_32FC1,
    vals
  );
  printf("Ex 3_3 matrix initialized\n");
}
IplImage
typedef struct _IplImage{int nSize; /* IplImage大小 */int ID; /* 版本 (=0)*/int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */int alphaChannel; /* 被OpenCV忽略 */int depth; /* 像素的位深度: IPL_DEPTH_8U, IPL_DEPTH_8S, IPL_DEPTH_16U,IPL_DEPTH_16S, IPL_DEPTH_32S, IPL_DEPTH_32F and IPL_DEPTH_64F 可支持 */char colorModel[4]; /* 被OpenCV忽略 */char channelSeq[4]; /* 同上 */int dataOrder; /* 0 - 交叉存取颜色通道, 1 - 分开的颜色通道.cvCreateImage只能创建交叉存取图像 */int origin; /* 0 - 顶―左结构,1 - 底―左结构 (Windows bitmaps 风格) */int align; /* 图像行排列 (4 or 8). OpenCV 忽略它,使用 widthStep 代替 */int width; /* 图像宽像素数 */int height; /* 图像高像素数*/struct _IplROI *roi;/* 图像感兴趣区域. 当该值非空只对该区域进行处理 */struct _IplImage *maskROI; /* 在 OpenCV中必须置NULL */void *imageId; /* 同上*/struct _IplTileInfo *tileInfo; /*同上*/int imageSize; /* 图像数据大小(在交叉存取格式下imageSize=image->height*image->widthStep),单位字节*/char *imageData; /* 指向排列的图像数据 */int widthStep; /* 排列的图像行大小,以字节为单位 */int BorderMode[4]; /* 边际结束模式, 被OpenCV忽略 */int BorderConst[4]; /* 同上 */char *imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */}

重要成员:

1.width和height

2.depth和nchannals

3.origin

可以有两个值,IPL_ORIGIN_TL和IPL_ORIGIN_TL,分别设置坐标原点的位置位于图像的左上角和左下角

4.widthStep

相邻行的同列之间的字节数,和width不同,因为为了处理高效,没喊都会用固定的字节数对其,所以可能有冗余字节

5.imageData

包含一个指向第一行图像数据的指针

6.感兴趣区域ROI

函数只对处于ROI设置的图像区域进行操作,如果ROI结构体中的COI被设置为非零,那么指定的通道被操作(前提是函数支持COI)

要设置和取消ROI,分别用cvSetImageROI(IplImage* image,CvRect)和cvResetImageROI(IplImage* image)

7.dataOrder

IPL_DATA_ORDER_PLANE:相同通道的放在一起连续拜访,OPENCV不支持

IPL_DATA_ORDER_PIXEL:通道交错排列,目前OPENCV支持的方式


你可能感兴趣的:(opencv,opencv,基本数据类型)