您的位置:首页 > 理论基础 > 数据结构算法

OpenCV基础数据结构--基础入门

2014-05-28 15:24 302 查看

图像数据结构

IPL 图像:

IplImage

|-- int nChannels; // 色彩通道数(1,2,3,4)

|-- int depth; // 象素色深:

| // IPL_DEPTH_8U, IPL_DEPTH_8S,

| // IPL_DEPTH_16U,IPL_DEPTH_16S,

| // IPL_DEPTH_32S,IPL_DEPTH_32F,

| // IPL_DEPTH_64F

|-- int width; // 图像宽度(象素点数)

|-- int height; // 图像高度(象素点数)

|-- char* imageData; // 指针指向成一列排列的图像数据

| // 注意色彩顺序为BGR

|-- int dataOrder; // 0 - 彩色通道交叉存取 BGRBGRBGR,

| // 1 - 彩色通道分隔存取 BBBGGGRRR

| // 函数cvCreateImage只能创建交叉存取的图像

|-- int origin; // 0 - 起点为左上角,

| // 1 - 起点为右下角(Windows位图bitmap格式)

|-- int widthStep; // 每行图像数据所占字节大小

|-- int imageSize; // 图像数据所占字节大小 = 高度*每行图像数据字节大小

|-- struct _IplROI *roi;// 图像ROI. 若不为NULL则表示需要处理的图像

| // 区域.

|-- char *imageDataOrigin; // 指针指向图像数据原点

| // (用来校准图像存储单元的重新分配)

|

|-- int align; // 图像行校准: 4或8字节校准

| // OpenCV不采用它而使用widthStep

|-- char colorModel[4]; // 图像色彩模型 - 被OpenCV忽略
矩阵与向量

矩阵:

CvMat // 2维数组

|-- int type; // 元素类型(uchar,short,int,float,double)

|-- int step; // 一行所占字节长度

|-- int rows, cols; // 尺寸大小

|-- int height, width; // 备用尺寸参照

|-- union data;

|-- uchar* ptr; // 针对unsigned char矩阵的数据指针

|-- short* s; // 针对short矩阵的数据指针

|-- int* i; // 针对integer矩阵的数据指针

|-- float* fl; // 针对float矩阵的数据指针

|-- double* db; // 针对double矩阵的数据指针

CvMatND // N-维数组

|-- int type; // 元素类型(uchar,short,int,float,double)

|-- int dims; // 数组维数

|-- union data;

| |-- uchar* ptr; // 针对unsigned char矩阵的数据指针

| |-- short* s; // 针对short矩阵的数据指针

| |-- int* i; // 针对integer矩阵的数据指针

| |-- float* fl; // 针对float矩阵的数据指针

| |-- double* db; // 针对double矩阵的数据指针

|

|-- struct dim[]; // 每个维的信息

|-- size; // 该维内元素个数

|-- step; // 该维内元素之间偏移量

CvSparseMat // 稀疏N维数组

通用数组:

CvArr* // 仅作为函数参数,说明函数接受多种类型的数组,例如:

// IplImage*, CvMat* 或者 CvSeq*.

// 只需通过分析数组头部的前4字节便可确定数组类型

标量:

CvScalar

|-- double val[4]; //4D向量
初始化函数:
CvScalar s = cvScalar(double val0, double val1=0, double val2=0, double val3=0);
举例:
CvScalar s = cvScalar(20.0);

s.val[0]=10.0;
注意:初始化函数与数据结构同名,只是首字母小写. 它不是C++的构造函数.
其他数据结构

点:

CvPoint p = cvPoint(int x, int y);

CvPoint2D32f p = cvPoint2D32f(float x, float y);

CvPoint3D32f p = cvPoint3D32f(float x, float y, float z);

例如:

p.x=5.0;

p.y=5.0;

长方形尺寸:

CvSize r = cvSize(int width, int height);

CvSize2D32f r = cvSize2D32f(float width, float height);

带偏移量的长方形尺寸:

CvRect r = cvRect(int x, int y, int width, int height);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: