opencv-----基本数据类型

OpenCV提供了多种基本数据类型。可以在"…/OpenCV/cxcore/include"目录下的cxtypes.h文件中查看其详细定义。

CvPoint是一个包含integer类型成员x和y的简单结构体。CvPoint有两个变体类型:CvPoint2D32f和CvPoint3D32f。前者同样有两个成员x,y,但它们是浮点类型;而后者却多了一个浮点类型的成员z。

CvSize类型与CvPoint非常相似,但它的数据成员是integer类型的width和height。如果希望使用浮点类型,则选用CvSize的变体类型CvSize2D32f。

CvRect类型派生于CvPoint和CvSize,它包含4个数据成员:x,y,width和height。(正如你所想的那样,该类型是一个复合类型)。

CvScalar类型包含4个整型成员,CvScalar有一个单独的成员val,它是一个指向4个双精度浮点数数组的指针。

所有这些数据类型具有以其名称来定义的构造函数,例如cvSize()。(构造函数通常 具有与结构类型一样的名称,只是首字母不大写)。记住,这是C而不是C++,所以这些构造函数只是内联函数,它们首先提取参数列表,然后返回被赋予相关值的结构。

各数据类型的内联构造函数被列在表3-1中:cvPointXXX(),cvSize(),cvRect()和cvScalar()。这些结构都十分有用,因为它们不仅使代码更容易编写,而且也更易于阅读。假设要在(5,10)和(20,30)之间画一个白色矩形,只需简单调用:

  1. cvRectangle(
  2. myImg,
  3. cvPoint(5,10),
  4. cvPoint(20,30),
  5. cvScalar(255,255,255)
  6. );

表3-1:points, size, rectangles和calar三元组的结构


结构


成员


意义


CvPoint


int x, y


图像中的点


CvPoint2D32f


float x, y


二维空间中的点


CvPoint3D32f


float x, y, z


三维空间中的点


CvSize


int width,

height


图像的尺寸


CvRect


int x, y,

width, height


图像的部分区域


CvScalar


double val[4]


RGBA 值

cvScalar是一个特殊的例子:它有3个构造函数。第一个是cvScalar(),它需要一个、两个、三个或者四个参数并将这些参数传递给数组val[]中的相应元素。第二个构造函数是cvRealScalar(),它需要一个参数,它被传递给给val[0],而val[]数组别的值被赋为0。最后一个有所变化的是cvScalarAll(),它需要一个参数并且val[]中的4个元素都会设置为这个参数。

cvPoint二维坐标系下的点,类型为整型

typedef struct CvPoint { int x; int y; } CvPoint;
 inline CvPoint cvPoint( int x, int y );
 inline CvPoint cvPointFrom32f( CvPoint2D32f point )  CvPoint2D32f 二维坐标下的点,类型为浮点
typedef struct CvPoint2D32f { float x; float y; } CvPoint2D32f;
 inline CvPoint2D32f cvPoint2D32f( double x, double y );
 inline CvPoint2D32f cvPointTo32f( CvPoint point );
  CvPoint3D32f  三维坐标下的点,类型为浮点
typedef struct CvPoint3D32f { float x; float y; float z; } CvPoint3D32f;
 inline CvPoint3D32f cvPoint3D32f( 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 ); { CvSize2D32f s; s.width = (float)width; s.height = (float)height; return s; }

CvRect矩形框的偏移和大小

typedef struct CvRect { int x; int y; int width; int height; } CvRect;
 inline CvRect cvRect( int x, int y, int width, int height ); { CvRect os; os.x = x; os.y = y; os.width = width; os.height = heigth; reture os;}

CvScalar 可存放在1-,2-,3-,4-TUPLE类型的捆绑数据的容器

typedef struct CvScalar { double val[4] } CvScalar;
 inline CvScalar cvScalar( double val0, double val1, double val2, double val3); { CvScalar arr; arr.val[4] = {val0,val1,val2,val3}; reture arr;}
 inline CvScalar cvScalarAll( double val0123 ); { CvScalar arr; arr.val[4] = {val0123,val0123,val0123,val0123,}; reture arr;}
 inline CvScalar cvRealScalar( double val0 ); { CvScalar arr; arr.val[4] = {val0}; reture arr;}

CvTermCriteria 迭代算法的终止准则

#define CV_TERMCRIT_ITER 1 #define CV_TERMCRIT_NUMBER CV_TERMCRIT_ITER #define CV_TERMCRIT_EPS 2 typedef struct CvTermCriteria { int type; 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; 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; 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; int dims; int* refcount; struct CvSet* heap; void** hashtable; int hashsize; int total; int valoffset; int idxoffset; int size[CV_MAX_DIM]; } CvSparseMat;    
 IplImage  IPL 图像头
typedef struct _IplImage { int nSize; int ID; int nChannels; int alphaChannel; int depth; char colorModel[4]; char channelSeq[4]; int dataOrder; int origin; int align; int width; int height; struct _IplROI *roi; struct _IplImage *maskROI; void *imageId; struct _IplTileInfo *tileInfo; int imageSize; char *imageData; int widthStep; int BorderMode[4]; int BorderConst[4]; char *imageDataOrigin; } IplImage;

IplImage结构来自于 Intel Image Processing Library(是其本身所具有的)。OpenCV 只支持其中的一个子集:

alphaChannel 在OpenCV中被忽略。 colorModel 和channelSeq 被OpenCV忽略。OpenCV颜色转换的唯一函数 cvCvtColor把原图像的颜色空间的目标图像的颜色空间作为一个参数。 dataOrder 必须是IPL_DATA_ORDER_PIXEL (颜色通道是交叉存取),然而平面图像的被选择通道可以被处理,就像COI(感兴趣的通道)被设置过一样。 align 是被OpenCV忽略的,而用 widthStep 去访问后继的图像行。 不支持maskROI 。处理MASK的函数把他当作一个分离的参数。MASK在 OpenCV 里是 8-bit,然而在 IPL他是 1-bit。 tileInfo 不支持。 BorderMode和BorderConst是不支持的。每个 OpenCV 函数处理像素的邻近的像素,通常使用单一的固定代码边际模式。

除了上述限制,OpenCV处理ROI有不同的要求。要求原图像和目标图像的尺寸或 ROI的尺寸必须(根据不同的操作,例如cvPyrDown 目标图像的宽(高)必须等于原图像的宽(高)除以2 ±1)精确匹配,而IPL处理交叉区域,如图像的大小或ROI大小可能是完全独立的。 CvArr 不确定数组

typedef void CvArr;

CvArr* 仅仅是被用于作函数的参数,用于指示函数接收的数组类型可以不止一个,如 IplImage*, CvMat* 甚至 CvSeq*. 最终的数组类型是在运行时通过分析数组头的前4 个字节判断。

opencv-----基本数据类型

时间: 2024-10-28 00:44:10

opencv-----基本数据类型的相关文章

OpenCV Mat数据类型及位数总结(转载)

OpenCV Mat数据类型及位数总结(转载) 前言 opencv中很多数据结构为了达到內存使用的最优化,通常都会用它最小上限的空间来分配变量,有的数据结构也会因为图像文件格式的关系而给予适当的变量,因此需要知道它们声明的空间大小来配置适当的变量.一 般标准的图片,为RGB格式它们的大小为8bits格式,范围为0~255,对一个int空间的类型来说实在是太小,整整浪费了24bits的空间,假设有个640*480的BMP文件空间存储內存,那整整浪费了640*480*3*(32-8)bits的內存空

OpenCV——像素数据类型总结<摘>

1.Unsigned 8bits(一般的图像文件格式使用的大小)IplImage数据结构参数:IPL_DEPTH_8UCvMat数据结构参数:CV_8UC1,CV_8UC2,CV_8UC3,CV_8UC4 变量类型 空间大小 范围 其他 uchar 8bits 0~255 (OpenCV缺省变量,同等unsigned char) unsigned char 8bits 0~255 2.Signed 8bitsIplImage数据结构参数:IPL_DEPTH_8SCvMat数据结构参数:CV_8S

OpenCV基本数据类型

CvPoint 二维坐标系下的点,类型为整型 typedef struct CvPoint { intx;/* X坐标,通常以为基点*/ inty;/* y坐标,通常以为基点*/ }CvPoint; /* 构造函数*/ inline CvPoint cvPoint(intx,inty ); /* 从CvPoint2D32f类型转换得来*/ inline CvPoint cvPointFrom32f(CvPoint2D32fpoint) CvPoint2D32f 二维坐标下的点,类型为浮点 typ

[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基于二维整形坐标轴

OpenCV图像的轮廓

查找轮廓 轮廓到底是什么?一个轮廓一般对应一系列的点,也就是图像中的一条曲线.表示的方法可能根据不同情况而有所不同.有多重方法可以表示曲线.在openCV中一般用序列来存储轮廓信息.序列中的每一个元素是曲线中一个点的位置.关于序列表示的轮廓细节将在后面讨论,现在只要简单把轮廓想象为使用CvSeq表示的一系列的点就可以了. 函数cvFindContours()从二值图像中寻找轮廓.cvFindContours()处理的图像可以是从cvCanny()函数得到的有边缘像素的图像,或者是从cvThres

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

OpenCv的基本数据类型

构造函数一般就是把第一个C变成小写 CvScalar有三个构造函数:1.cvScalar,分别给4个值赋值2.cvRealScalar,给第一个值赋值,其余三个为0 3.cvScalarAll,给所有参数赋一个值 1.CvArr 为抽象基类 2.CvMat typedef struct CvMat{int type; /* CvMat 标识 (CV_MAT_MAGIC_VAL), 元素类型和标记 */int step; /* 以字节为单位的行数据长度*/int* refcount; /* 数据引

OpenCV 中的三大数据类型:CvMat 类型

前言 本文将介绍 OpenCV 中的矩阵结构 CvMat 并提供几个很常用的矩阵使用方法. 更多的矩阵处理函数还请参阅相关资料. CvMat 的类型定义 1 typedef struct CvMat 2 { 3 int type; // 数据类型 4 int step; // 行长度 5 int* refcount; /* 内部使用 */ 6 int hdr_refcount; /* 内部使用 */ 7 union // 指向数据区的指针 8 { 9 uchar* ptr; 10 short*

深度图从ros数据类型转换成了opencv数据类型

近期在参考高翔博士的的"一起学RGBD-SLAM"教程,用realsense D435相机做点云合成. 一. RGBD图像采集 以下是我在ros下,通过image_transport包,根据给定的采集速度从realsense D435发布的topic中订阅深度图的代码. void depth_Callback(const sensor_msgs::ImageConstPtr& depth_msg) { cv_bridge::CvImagePtr depth_ptr; try {

OpenCV 中的三大数据类型( 概述 )

前言 OpenCV 提供了许多封装好了的类型,而其中,以三大类型最为核心.本文将大致介绍这三大类型. CvArr:不确定数组 它可以被视为一个抽象基类,后面的两大类型都继承此类型并扩展.只要某个函数的形参是这个类型,那么我们就可以把后面两种类型作为实参传递进去做处理. CvMat:多通道矩阵 它用来存放矩阵,OpeCV 提供了很多对此类型进行操作的函数,故使用此类型可以轻松玩转矩阵结构 :). IplImage:图像头 它用来存放图像,在之前的示例代码中,已经见到很多次了.由于对计算机而言,图像