[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
个字节判断。
[OpenCV学习笔记1][OpenCV基本数据类型]的更多相关文章
- 第十七周 - OpenCV 学习笔记 S1 - OpenCV 基本函数
Imread()函数: 基本功能:读取图像到OpenCv中. 1.函数原型: Mat imwrite(const strings& filename, int flag = 1); 第一个参数 ...
- OpenCV学习笔记(12)——OpenCV中的轮廓
什么是轮廓 找轮廓.绘制轮廓等 1.什么是轮廓 轮廓可看做将连续的点(连着边界)连在一起的曲线,具有相同的颜色和灰度.轮廓在形态分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找 ...
- opencv学习笔记(三)基本数据类型
opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle、boxPoints、int0、circle、rectangle函数的用法
函数中的代码是部分代码,详细代码在最后 1 cv2.boundingRect 作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界. cv2.boundingRect(arr ...
- OpenCV学习笔记3
OpenCV学习笔记3 图像平滑(低通滤波) 使用低通滤波器可以达到图像模糊的目的.这对与去除噪音很有帮助.其实就是去除图像中的高频成分(比如:噪音,边界).所以边界也会被模糊一点.(当然,也有一些模 ...
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- opencv学习笔记(五)镜像对称
opencv学习笔记(五)镜像对称 设图像的宽度为width,长度为height.(x,y)为变换后的坐标,(x0,y0)为原图像的坐标. 水平镜像变换: 代码实现: #include <ios ...
随机推荐
- 使用Linux 安装MySQL
文章 link 在安装mysql数据库服务器前,确保你的linux系统是可以连接网络的,下面我们将通过源码方式来安装mysql首先通过putty登入进你的Linux系统,确保系统中已经安装的gcc ...
- VS访问不到TFS、VS连接TFS报TF30063
=============================================== 20170704_第一次修改 ccb_warlock === ...
- 发短信utils
package cn.itcast.bos.utils; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; ...
- [HNOI2008]Cards
题目描述 小春现在很清闲,面对书桌上的N张牌,他决定给每张染色,目前小春只有3种颜色:红色,蓝色,绿色.他询问Sun有多少种染色方案,Sun很快就给出了答案. 进一步,小春要求染出Sr张红色,Sb张蓝 ...
- glimmer 3.02安装小记
wget http://www.cbcb.umd.edu/software/glimmer/glimmer302.tar.gz tar xzfglimmer302.tar.gz cd glimmer3 ...
- 使用MyBatis时接收值和返回值选择Map类型或者实体类型
MyBatis作为现近JavaEE企业级项目开发中常用的持久层框架之一,以其简洁高效的ORM映射和高度的SQL的自由性被广大开发人员认可.Mybatis在接收系统传来的参数和返回的参数时主要可以有Ma ...
- JS中call,apply,bind方法的总结
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user: "小马扎", fn: ...
- 理解SynchronizationContext,如何在Winform里面跨线程访问UI控件
SynchronizationContext 类是一个基类,可提供不带同步的自由线程上下文. 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为.此模型 ...
- iPhone X 适配
背景 iPhone X 刘海机于9月13日发布,给科技小春晚带来一波高潮.作为开发人员却多出来一份忧虑,iPhone X 怎么适配?我们 App 的脑袋会不会也长一刘海出来?Tabbar 会不会被圆角 ...
- [Spark内核] 第34课:Stage划分和Task最佳位置算法源码彻底解密
本課主題 Job Stage 划分算法解密 Task 最佳位置算法實現解密 引言 作业调度的划分算法以及 Task 的最佳位置的算法,因为 Stage 的划分是DAGScheduler 工作的核心,这 ...