opencv常用函数及数据结构

2019-01-26 17:06

1. cvCreateImage 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ); Size:图像宽、高. Depth:图像元素的位深度,可以是下面的其中之一: IPL_DEPTH_8U - 无符号8位整型 IPL_DEPTH_8S - 有符号8位整型 IPL_DEPTH_16U - 无符号16位整型 IPL_DEPTH_16S - 有符号16位整型 IPL_DEPTH_32S - 有符号32位整型 IPL_DEPTH_32F - 单精度浮点数 IPL_DEPTH_64F - 双精度浮点数 channels: 每个元素(像素)通道号.可以是 1, 2, 3 或 4.通道是交叉存取的,例如通常的彩色图像数据排列是:b0 g0 r0 b1 g1 r1 ... 虽然通常 IPL 图象格式可以存贮非交叉存取的图像,并且一些OpenCV 也能处理他, 但是这个函数只能创建交叉存取图像. 基本数据类型之一。表示矩阵框大小,以像素为精度。与CvPoint结构类似,但数据成员是integer类型的width和height。 typedef struct CvSize { int width; /* 矩形宽 */ int height; /* 矩形高 */ } CvSize; width:矩形宽 height:矩形高 2. CvSize 3. cvResize 图像大小变换 Void cvResize( const CvArr* src, CvArr* dst, int interpolation = CV_INTER_LINEAR ); Src:输入图像. Dst:输出图像. Interpolation:插值方法: ? CV_INTER_NN - 最近邻插值, ? CV_INTER_LINEAR - 双线性插值 (缺省使用) ? CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于CV_INTER_NN 方法.. ? CV_INTER_CUBIC - 立方插值. 函数 cvResize 将图像 src 改变尺寸得到与 dst 同样大小。若设定 ROI,函数将按常规支持 ROI. 各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, double param4=0 ); src:输入图像. 4. cvSoomth Dst:输出图像. Smoothtype:平滑方法. ? CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的 param1×param2 领域求和。如果邻域大小是 ? 变化的,可以事先利用函数 cvIntegral 计算积分图像。 ? CV_BLUR (simple blur) - 对每个象素param1×param2邻域求和并做尺度变换 1/(param1?param2). ? CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积 ? CV_MEDIAN (median blur) - 对图像进行核大小为param1×param1 的中值滤波 (i.e. 邻域是方的). ? CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. param1:平滑操作的第一个参数. param2:平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值为零,则表示其被设定为param1。 param3:对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:sigma = (n/2 - 1)*0.3 + 0.8,其中 n=param1 对应水平核, n=param2 对应垂直核. 详情请参照opencv中文参考手册 5. cvReleaseImage 释放图像数据 void cvReleaseImage( IplImage** image ); image:双指针指向图像内存分配单元。 //IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); //cvReleaseImage(&img); 返回矩阵或图像ROI的大小(ROI:region of interest感兴趣区域) CvSize cvGetSize( const CvArr* arr ); arr:数组头。即一个地址 函数 cvGetSize 返回图像或矩阵的行数和列数,如果是图像就返回ROI的大小。 制作图像的完整拷贝 IplImage* cvCloneImage( const IplImage* image ); Image:原图像. 函数 cvCloneImage 制作图像的完整拷贝包括头、ROI和数据 8. cvCvtColor 色彩空间转换 void cvCvtColor( const CvArr* src, CvArr* dst, int code ); src:输入的 8-bit , 16-bit 或 32-bit 单倍精度浮点数影像。 dst:输出的 8-bit , 16-bit 或 32-bit 单倍精度浮点数影像。 Code:彩空间转换,通过定义 CV_2 常数 CV_BGR2GRAY:色彩图像转换为灰度图像 请参考opencv中文手册P268 6. cvGetSize 7. cvClone 9. CvArr* ? 仅作为函数定义的参数使用, ? 表明函数可以接受不同类型的矩阵作为参数, ? 例如:IplImage*, CvMat* 甚至是 CvSeq*. ? 矩阵的类型通过矩阵头的前4个字节信息来确定 10. cvConvertScale 使用线性变换转换数组 void cvConvertScale( const CvArr* src, CvArr* dst, double scale=1, double shift = 0 ); src:输入数组. dst:输出数组 scale:比例因子. shift:该加数被加到输入数组元素按比例缩放后得到的元素上 dst(I)=src(I)*scale +(shift,shift,...) 即若scale=1,shift=0,则输出与输入是同一图像。 11. cvSub 12. CvMemStorage cvSub(Ma, Mb, Mc); // Ma-Mb -> Mc Growing memory storage typedef struct CvMemStorage { struct CvMemBlock* bottom;/* first allocated block */ struct CvMemBlock* top; /* the current memory block - top of the stack */ struct CvMemStorage* parent; /* borrows new blocks from */ int block_size; /* block size */ int free_space; /* free space in the top block (in bytes) */ } CvMemStorage; 内存存储器是一个可用来存储诸如序列,轮廓,图形,子划分等动态增长数据结构的底层结构。它是由一系列以 同等大小的内存块构成,呈列表型 ---bottom 域指的是列首,top 域指的是当前指向的块但未必是列 尾.在bottom和top之间所有的块(包括bottom, 不包括top)被完全占据了空间;在 top和列尾之间所有的块 (包括块尾,不包括top)则是空的;而top块本身则被占据了部分空间 -- free_space 指的是top块剩余的空字节 数。 13. CvSeq 14. SeqPopFront 可动态增长元素序列Growable sequence of elements 见P109 删除序列的头部元素 void cvSeqPopFront( CvSeq* seq, void* element=NULL ); seq:序列 element:可选参数。如果该指针不为空,就拷贝被删除元素到指针指向的位置。 函数 cvSeqPopFront 删除序列的头部元素。如果序列已经为空,就报告一错误。函数时间复杂度为 O(1). 创建一序列 CvSeq* cvCreateSeq( int seq_flags, int header_size, int elem_size, CvMemStorage* storage ); seq_flags:序列的符号标志。如果序列不会被传递给任何使用特定序列的函15. cvCreateSeq 数,那么将它设为 0, 否则从预定义的序列类型中选择一合适的类型。 header_size:序列头部的大小;必须大于或等于 sizeof(CvSeq). 如果制定了类型或它的扩展名,则此类型必须适合基类的头部大小。 elem_size:元素的大小,以字节计。这个大小必须与序列类型相一致。例如,对于一个点的序列,元素类型CV_SEQ_ELTYPE_POINT 应当被指定, 参数elem_size 必须等同于 sizeof(CvPoint). 函数 cvCreateSeq 创建一序列并且返回指向该序列的指针。函数在存储块中分配序列的头部作为一个连续躯体,并且设置结构的 flags域, elem_size域, header_size域和 storage域的值为被传递过来的值,设置delta_elems 为默认值(可通过函数 cvSetSeqBlockSize 重新对其赋值),清空其他的头部域,包括前sizeof(CvSeq) 个字节的空间。 16. cvSeqPush 添加元素到序列的尾部 char* cvSeqPush( CvSeq* seq, void* element=NULL ); seq:块 element:添加的元素 函数 cvSeqPush 在序列块的尾部添加一元素并返回指向该元素得指针。如果输入参数为 null, 函数就仅仅分配一空间,留给下一个元素使用。代码说明如何使用该函数去创建一空间请见P112。 返回索引所指定的元素指针 char* cvGetSeqElem( const CvSeq* seq, int index ); #define CV_GET_SEQ_ELEM( TYPE, seq, index ) (TYPE*)cvGetSeqElem( (CvSeq*)(seq), (index) ) Seq:序列 Index:索引 函数 cvGetSeqElem 查找序列中索引所指定的元素,并返回指向该元素的指针。如果元素不存在,则返回 0。 函数支持负数,即: -1 代表序列的最后一个元素, -2 代表最后第二个元素,等。 如果序列只包含一个块,或者所需的元素在第一个块中,那么应当使用宏。见下18 返回索引所指定的元素指针 如果序列只包含一个块,或者所需的元素在第一个块中,那么应当使用宏, CV_GET_SEQ_ELEM( elemType, seq, index ) 宏中的参数 elemType: 是序列中元素的类型(如:CvPoint), seq: 表示序列 index: 代表所需元素的索引。 该宏首先核查所需的元素是否属于第一个块,如果是,则返回该元素,否则,该宏就调用主函数 GetSeqElem. 如果索引为负数的话,则总是调用函数 cvGetSeqElem。函数的时间复杂度为 O(1), 假设块的大小要比元素的数量要小。 转换浮点数为整数 int cvRound( double value ); int cvFloor( double value ); 17. GetSeqElem 18. CV_GET_SEQ_ELEM 19. Round, Floor, Ceil int cvCeil( double value ); value:输入浮点值 函数 cvRound, cvFloor, cvCeil 用一种舍入方法将输入浮点数转换成整数。 cvRound 返回和参数最接近的整数值。 cvFloor 返回不大于参数的最大整数值。cvCeil 返回不小于参数的最小整数值。在某些体系结构中该函数 工作起来比标准 C 操作起来还要快。如果参数的绝对值大于231 ,结果是不可预料的。对特殊值 (±Inf, NaN)未进行处理。


opencv常用函数及数据结构.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电网安规复习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: