[OpenCV学习笔记1][OpenCV基本数据类型]

CvPoint
基于二维整形坐标轴的点
typedef struct CvPoint
{
int x; /* X 坐标, 通常以 0 为基点 */
int y; /* y 坐标,通常以 0 为基点 */
}
CvPoint;
/* 构造函数 */
inline CvPoint cvPoint( int x, int y );
/* 从 CvPoint2D32f 类型转换得来 */
inline CvPoint cvPointFrom32f( CvPoint2D32f point );

CvPoint
基于二维整形坐标轴的点
typedef struct CvPoint
{
int x; /* X 坐标, 通常以 0 为基点 */
int y; /* y 坐标,通常以 0 为基点 */
}
CvPoint;
/* 构造函数 */
inline CvPoint cvPoint( int x, int y );
/* 从 CvPoint2D32f 类型转换得来 */
inline CvPoint cvPointFrom32f( CvPoint2D32f point );

/* 构造函数 */
inline CvPoint2D32f cvPoint2D32f( double x, double y );
/* 从 CvPoint 转换来 */
inline CvPoint2D32f cvPointTo32f( CvPoint point );

CvPoint3D32f
三维浮点坐标上的点
typedef struct CvPoint3D32f
{
float x; /* x-坐标,通常基于 0 */
float y; /* y-坐标, 通常基于 0*/
float z; /* z-坐标,通常基于 0 */
}
CvPoint3D32f;
/* 构造函数 */
inline CvPoint3D32f cvPoint3D32f( double x, double y, double z );

CvPoint2D64f
2D point with double precision floating-point coordinates
typedef struct CvPoint2D64f
{
double x; /* x-坐标,通常基于 0 */
double y; /* y-坐标,通常基于 0 */
}
CvPoint2D64f;
/* 构造函数 */
inline CvPoint2D64f cvPoint2D64f( double x, double y );
/* 从 CvPoint 转换得来 */
inline CvPoint2D64f cvPointTo64f( CvPoint point );

CvPoint3D64f
3D point with double precision floating-point coordinates
typedef struct CvPoint3D64f
{
double x; /* x-坐标,通常基于 0 */
double y; /* y-坐标,通常基于 0 */
double z; /* z-坐标,通常基于 0 */

}
CvPoint3D64f;
/* 构造函数 */
inline CvPoint3D64f cvPoint3D64f( double x, double y, double z );

}
CvPoint3D64f;
/* 构造函数 */
inline CvPoint3D64f cvPoint3D64f( 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-TUPLE 类型的捆绑数据的容器
typedef struct CvScalar
{
double val[4]
}
CvScalar;
/* 构造函数:用 val0 初始化 val[0]用 val1 初始化 val[1]等等*/
inline CvScalar cvScalar( double val0, double val1=0,
double val2=0, double val3=0 );
/* 构造函数:用 val0123 初始化 val0123 */
inline CvScalar cvScalarAll( double val0123 );
/* 构造函数:用 val0 初始化 val[0],val[1]…val[3]用 0 初始化 */
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 );
/* 检查终止标准并且转换使 type=CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,并且满足
max_iter 和 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; /* 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; /* CvMatND 标识(CV_MATND_MAGIC_VAL), 元素类型和标号*/
int dims; /* 数组维数 */
int* refcount; /* 数据参考计数 */
union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data; /* data 指针*/
/* 每维的数据结构 (元素号,以字节为单位的元素之间的距离)是配套定义的
*/
struct
{
int size;
int step;
}
dim[CV_MAX_DIM];
} CvMatND;
CvSparseMat
多维、多通道稀疏数组
typedef struct CvSparseMat
{
int type; /* CvSparseMat 标识 (CV_SPARSE_MAT_MAGIC_VAL), 元素类型和
标号 */
int dims; /* 维数 */
int* refcount; /* 参考数量 - 未用 */
struct CvSet* heap; /* HASH 表节点池 */
void** hashtable; /* HASH 表:每个入口有一个节点列表,有相同的 "以 HASH
大小为模板的 HASH 值" */
int hashsize; /* HASH 表大小 */
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
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; /* 指针指向一个不同的图像数据结构(不是必须排
列的),是为了纠正图像内存分配准备的 */
}
IplImage;
IplImage 结构来自于 Intel Image Processing Library(是其本身所具有的). OpenCV
只支持其中的一个子集:
? alpha 通道在 OpenCV 中被忽略.
? colorModel 和 channelSeq 被 OpenCV 忽略. OpenCV 颜色转换的 唯一个函数
cvCvtColor 把原图像的颜色空间的目标图像的颜色空间作为一个参数.
? 数据顺序 必须是 IPL_DATA_ORDER_PIXEL (颜色通道是交叉存取), 然面平面图像的被选
择通道可以被处理,就像 COI(感兴趣的通道)被设置过一样.
? 当 widthStep 被用于去接近图像行序列,排列是被 OpenCV 忽略的.
? 不支持 maskROI . 处理 MASK 的函数把他当作一个分离的参数. MASK 在 OpenCV 里是
8-bit, 然而在 IPL 他是 1-bit.
? 名字信息不支持.
? 边际模式和边际常量是不支持的. 每个 OpenCV 函数处理像素的邻近的像素,通常使
用单一的固定代码边际模式.
除了上述限制, OpenCV 处理 ROI 有不同的要求.要求原图像和目标图像的尺寸或 ROI 的尺寸必须
(根据不同的作操,例如 cvPyrDown 目标图像的宽(高)必须等于原图像的宽(高)除 2 ±1)精确
匹配,而 IPL 处理交叉区域,如图像的大小或 ROI 大小可能是完全独立的。
CvArr
不确定数组
typedef void CvArr;
CvArr* 仅仅是被用于作函数的参数,用于指示函数接收的数组类型可以不止一个,如
IplImage*, CvMat* 甚至 CvSeq*. 最终的数组类型是在运行时通过分析数组头的前 4
个字节判断。

原文地址:https://www.cnblogs.com/Jack-Tango/p/8322476.html

时间: 2024-10-25 19:55:13

[OpenCV学习笔记1][OpenCV基本数据类型]的相关文章

OpenCv学习笔记(三)---OpenCv中基本数据类型--Point,Size,Rect,Scalar,Vec3b类类型的详细解释及其OpenCv中源代码的详细分析

/********************************************************************************************* 程序功能: OpenCv的基本数据结构源代码的解读,我们常用的OpenCv的基本数据结构有六种: 1--Point类 2--Size类 3--Rect类 4--Scalar类 5--Vec3b--向量模板类 6--Range类 编写环境: OpenCv2.4.8+VS2010 地点时间: 陕西师范大学 201

QT+opencv学习笔记一 opencv配置及Mat浅拷贝

今天终于把Qt + opencv配置成功了,中间有一些曲折,在这里记录一下. vs2013 + opencv的方法之前记录过,但这次的不太一样,我们一开始按照这篇文章配置pro Qt5中进行OpenCV开发教程 但是,死活出不来结果,研究发现,我们用的是 mingw 不是 vs,这个方法适合vs编译器 (具体可以参考:win7下的Qt环境+OpenCV视觉库) 后来,我们找到了这篇文章 QT creator+OpenCV2.4.2+MinGW 在windows下开发环境配置 但是还是有点曲折,

OpenCv学习笔记(一)----OpenCv中Mat类源码的详细解读(2)

(一)像素存储的方法 1--本节我们讲解如何存储像素,存储像素值,需要指定: 1--颜色空间 2--数据类型 2--其中,颜色空间是指针对一个给定的颜色,如何组合颜色以其编码. 3--最简单的颜色空间是----灰度级空间----只需要处理:黑色和白色,对它们进行组合便可以产生不同程度的灰 色(256灰度级) 4--对于彩色方式---则有更多种类的颜色空间,但不论那种方式,都是把颜色分成:三个或者四个---基元素,通过 组合基元素,就可以产生所有的颜色 1--RGB颜色空间是最常用的一种颜色空间,

OpenCV学习笔记一 OpenCV 2.49 + Eclipse 配置教程

1.安装opencv库 1.1 双击opencv-2.4.9.exe,安装到指定目录. 1.2安装VC2010运行库,百度搜索VC2010运行库,下载安装即可.如果完成下面的所有配置之后运行程序时提示还缺少dll等文件,需要用360修复,进入人工服务,搜索提示缺少的dll文件,点击修复即可. 1.3将opencv\build\x86\vc11路径下的bin.lib.staticlib三个文件夹的路径添加到环境变量中. 2.配置Eclipse 2.1 新建一个工程file -> new -> c

OpenCv学习笔记(七)---OpenCv中的基本绘图函数,圆,椭圆,线段,矩形,多边形的绘制(1)

(一)本节教程的目的 本节你将学到: 1--如何使用Point在图像中定义2D点 2--如何以及为何使用Scalar 3--用OpenCv的函数Line绘直线 4--用OpenCvd的函数ellipse绘制椭圆 5--用OpenCv的函数rectangle绘矩形 6--用OpenCv的函数circle绘圆 7--用OpenCv的函数fillPoly绘填充多边形 (二)原理,本节我们将大量使用Point和Scalar这两个结构: **********************************

Opencv学习笔记(六)SURF学习笔记

原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. 看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习. SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高.它和SIFT的主要差别是图像多尺度空间的构建方法不同. 在计算视觉领域,尺度空间被象征性的表述

opencv学习笔记(四)投影

opencv学习笔记(四)投影 任选了一张图片用于测试,图片如下所示: 1 #include <cv.h> 2 #include <highgui.h> 3 using namespace std; 4 using namespace cv; 5 int main() 6 { 7 IplImage * src = cvLoadImage("cat.png", 0); //强制转化读取图像为灰度图 8 cvShowImage("灰度图像", s

OpenCV学习笔记(01)我的第一个OpenCV程序(环境配置)

昨天刚刚考完编译原理,私心想着可以做一些与考试无关的东西了.一直想做和图像处理相关的东西,趁这段时间有空学习一下OpenCV,搭建环境真是一件麻烦的事情,搞了近三个小时终于OK了.先来张图: 大致描述一下步骤吧: 一.安装前准备 1.VS2012(网上看到很多用的VS2010,但是基本不影响) 2.OpenCV 安装包(我下载的是最新的2.4.9) 二.安装OpenCV 1.解压OPenCV 说是安装,其实就是解压,OpenCV的Windows安装程序就是一个自解压程序: 这里我解压到C:\Pr

opencv学习笔记(03)——遍历图像(迭代器法)

1 #include <opencv2\highgui\highgui.hpp> 2 #include <opencv2\imgproc\imgproc.hpp> 3 #include <opencv2\core\core.hpp> 4 5 void colorReduce(cv::Mat& img, int div=64); 6 7 8 int main() 9 { 10 cv::Mat img_orginal = cv::imread("F:\\i