Карта посещений

Партнеры сайта

Счетчики

Реклама Google

 

Oсновные структуры

Материал из CompVision

Перейти к: навигация, поиск

Содержание

Структура CvPoint

Двумерная точка с целыми координатами

typedef struct CvPoint
{
int x; /* x-координата, обычно отсчитывается от нуля */
int y; /* y-координата, обычно отсчитывается от нуля */
}
CvPoint;
 
/* Конструктор */
inline CvPoint cvPoint( int x, int y );
 
/* Функция преобразования из CvPoint2D32f */
inline CvPoint cvPointFrom32f( CvPoint2D32f point );

Структура CvPoint2D32f

Двумерная точка с действительными координатами одинарной точности

typedef struct CvPoint2D32f
{
float x; /* x-координата, обычно отсчитывается от нуля */
float y; /* y-координата, обычно отсчитывается от нуля */
}
 
CvPoint2D32f;
 
/* Конструктор */
inline CvPoint2D32f cvPoint2D32f( double x, double y );
 
/* Функция преобразования из CvPoint */
inline CvPoint2D32f cvPointTo32f( CvPoint point );

Структура CvPoint3D32f

Трехмерная точка с действительными координатами одинарной точности

typedef struct CvPoint2D32f
{
float x; /* x-координата, обычно отсчитывается от нуля */
float y; /* y-координата, обычно отсчитывается от нуля */
float z; /* z-координата, обычно отсчитывается от нуля */
}
 
CvPoint3D32f;
 
/* Конструктор */
inline CvPoint3D32f cvPoint2D32f( double x, double y, double z);

Структура CvPoint2D64f

Двумерная точка с действительными координатами двойной точности

typedef struct CvPoint2D64f
{
double x; /* x-координата, обычно отсчитывается от нуля */
double y; /* y-координата, обычно отсчитывается от нуля */
}
 
CvPoint2D64f;
 
/* Конструктор */
inline CvPoint2D64f cvPoint2D64f( double x, double y );
 
/* Функция преобразования из CvPoint */
inline CvPoint2D64f cvPointTo64f( CvPoint point );

Структура CvPoint3D64f

Трехмерная точка с действительными координатами двойной точности

typedef struct CvPoint2D64f
{
double x; /* x-координата, обычно отсчитывается от нуля */
double y; /* y-координата, обычно отсчитывается от нуля */
double z; /* z-координата, обычно отсчитывается от нуля */
}
 
CvPoint3D64f;
 
/* Конструктор */
inline CvPoint3D64f cvPoint2D64f( double x, double y, double z);

Структура CvSize

Размер прямоугольника в целых пикселях

typedef struct CvSize
{
int width; /* ширина прямоугольника */
int height; /* высота прямоугольника */
}
 
CvSize;
 
/* конструктор */
inline CvSize cvSize( int width, int height );

Структура CvSize2D32f

Размер прямоугольника в дробных пикселях

typedef struct CvSize2D32f
 
{
 
float width; /* ширина прямоугольника */
 
float height; /* высота прямоугольника */
 
}
 
CvSize2D32f;
 
/* конструктор */
 
inline CvSize2D32f cvSize2D32f( double width, double height );

Структура CvRect

Смещение и размеры прямоугольника

typedef struct CvRect
{
int x; /* x-координата левого угла прямоугольника*/
int y; /* y-координата верхнего или нижнего угла прямоугольника*/
int width; /* ширина прямоугольника */
int height; /* высота прямоугольника */
}
CvRect;
 
/* конструктор */
inline CvRect cvRect( int x, int y, int width, int height );

Структура CvScalar

Контейнер для кортежей из 1, 2, 3 или 4 чисел

typedef struct CvScalar
{
double val[4];
}
CvScalar;
 
/* Конструктор: инициализирует val[0]> with val0, val[1]> значениями параметров функции. */
inline CvScalar cvScalar( double val0, double val1=0,double val2=0, double val3=0 );
 
/* Конструктор: инициализирует val[0]...val[3] значением параметра val0123 */
inline CvScalar cvScalarAll( double val0123 );
 
/* Конструктор: инициализирует val[0] with val0, val[1]...val[3] нулями */
inline CvScalar cvRealScalar( double val0 );

Структура CvTermCriteria

Условие завершения для итеративных алгоритмов

#define CV_TERMCRIT_ITER 1
#define CV_TERMCRIT_NUMBER CV_TERMCRIT_ITER
#define CV_TERMCRIT_EPS 2
 
typedef struct CvTermCriteria
{
int type; /* тип критерия, может быть задан комбинацией флагов CV_TERMCRIT_ITER и CV_TERMCRIT_EPS */
int max_iter; /* максимальное количество итераций */
double epsilon; /* требуемая точность результата */
}
CvTermCriteria;
 
/* конструктор */
inline CvTermCriteria cvTermCriteria( int type, int max_iter, double epsilon );
 
/* проверка выполнения условия завершения */
CvTermCriteria cvCheckTermCriteria( CvTermCriteria criteria,double default_eps,int default_max_iters );

Структура 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; /* указатели на данные */
 
#ifdef __cplusplus
 
union
{
int rows;
int height;
};
 
union
{
int cols;
int width;
};
 
#else
int rows; /* количество строк */
int cols; /* количество столбцов */
#endif
} CvMat;

Структура CvMatND

Многомерная плотная многоканальная матрица

typedef struct CvMatND
{
int type; /* сигнатура CvMat рана = CV_MATND_MAGIC_VAL, тип элеменов и флаги */
int dims; /* количество измерений массива */
int* refcount; /* счетчик ссылок на данные */
 
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data; /* указатели на данные */
 
/* пары (количество элементов, расстояние между элементами в байтах) для каждого измерения */
 
struct
{
int size;
int step;
}
 
dim[CV_MAX_DIM];
} CvMatND;

Структура CvSparseMat

Многомерная разреженная многоканальная матрица

typedef struct CvSparseMat
{
int type; /* сигнатура CvMat рана = CV_SPARSE_MAT_MAGIC_VAL),тип элеменов и флаги */
int dims; /* количество измерений */
int* refcount; /* счетчик ссылок - не используется */
struct CvSet* heap; /* куча узлов хэш-таблицы */
void** hashtable; /* хэш-таблица: каждый элемент имеет список узлов имеющих оди и тот же "hashvalue modulo hashsize" */
int hashsize; /* размер хэш-таблицы */
int total; /* общее количество узлов разреженного массива */
int valoffset; /* смещение значений в байтах для массива узлов */
int idxoffset; /* смещение индесков в байтах для массива узлов*/
int size[CV_MAX_DIM]; /* массив размеров измерений массива */
} CvSparseMat;

Структура IplImage

Заголовок IPL изображения

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 и IPL_DEPTH_64F*/
char colorModel[4]; /* игнорируется OpenCV */
char channelSeq[4]; /* то же самое */
int dataOrder; /* 0 - чередующиеся цветовые каналы, 1 - отдельные цветовые каналы.
cvCreateImage может создавать только чередующиеся цветовые каналы */
int origin; /* 0 - верхний левый угол принимается за начало координат,1 - нижний левый угол принимается за начало координат (стиль Windows) */
 
int align; /* выравнивание столбцов изображения (4 or 8). OpenCV игнорирует этот параметр и использует вместо него widthStep*/
int width; /* ширина изображения в пикселях */
int height; /* высота изображения в пикселях */
struct _IplROI *roi;/* область интереса - (ROI). когда не NULL, орпеделяет область для обработки */
struct _IplImage *maskROI; /* должен быть NULL в OpenCV */
void *imageId; /* то же самое*/
struct _IplTileInfo *tileInfo; /*то-же самое*/
int imageSize; /* размер данных изображения в байтах=image->height*image->widthStep в случае чередующихся цветовых данных)*/
char *imageData; /* указатель на выровненные данные изображения*/
int widthStep; /* казмер выровненных строк изображения в байтах */
int BorderMode[4]; /* игнорируется OpenCV */
int BorderConst[4]; /*то-же самое*/
char *imageDataOrigin; /* указатель на начало данных изображения (не обязательно выровненные) нужно для правильного освобождения выделенных данных */
}
IplImage;

Структура IplImage происходит из Intel Image Processing Library, в которой это родной формат представления изображений.

OpenCV поддерживает лишь некоторый набор возможных форматов IplImage:

alphaChannel - игнорируется OpenCV

colorModel и channelSeq игнорируются OpenCV. Единственная функция OpenCV, для работы с представлениями цвета это cvCvtColor, принимающая в качестве входных и выходных параметров пространства цвета (RGB HSV и т.д.).

dataOrder должен быть IPL_DATA_ORDER_PIXEL (цветовые каналы чередуются), однако отдельные цветовые каналы также могут обрабатывться, путем установки значения COI (color of interest) (цвет интереса).

align игнорируется OpenCV. Для расчета адреса определенной строки изображения используется парамер widthStep, определяющий лдину строки изображения в байтах.

MaskROI не поддерживается. Функции OpenCV работают с масками принимая их в качестве отдельного прараметра. Также в отличие от OpenCV где маска это массив 8-битных элементов, в IPL это массивы из 1 битных элементов.

titleInfo не поддерживается.

BorderMode и BorderConst не поддерживаются. Любая функция OpenCV работает с граничными (граница изображения) пикселями используя одиночную рамку вокруг изображения чаще всего получаемую копированием граничных точек.

Кроме ограничений описанных выше, OpenCV и IPL обрабатывают ROI по-разному. OpenCV требует чтобы размеры или размеры ROI всех входных и выходных изображений точно совпадали (в соответствии с операцией, так например для функции cvPyrDown размер выходного изображения должен быть: ширина(высота) = ширина(высота) входного изображения деленная на 2 плюс или минус единица), в то время как в IPL нет таких ограничений.