【转载】opencv中的一些宏

转载 2011年01月10日 11:01:00

opencv中的一些宏

 

原文地址:http://blog.csdn.net/wqvbjhc/archive/2010/04/17/5496632.aspx

 

CV_FUNCNAME 定义变量 cvFuncName存放函数名,用于出错时可以报告出错的函数

__FILE__  C语言中的宏,CV_Error中经常用到,说明出错的函数所在源文件名

__LINE__  C语言中的宏,CV_Error中经常用到, 说明出错位置的函数

cxerror.h 中

view plaincopy to clipboardprint?
 /* CV_FUNCNAME macro defines icvFuncName constant which is used by CV_ERROR macro */ 
#ifdef CV_NO_FUNC_NAMES  
    #define CV_FUNCNAME( Name )  
    #define cvFuncName ""  
#else     
    #define CV_FUNCNAME( Name )  /  
    static char cvFuncName[] = Name  
#endif  
/* 
  CV_ERROR macro unconditionally raises error with passed code and message. 
  After raising error, control will be transferred to the exit label. 
*/ 
#define CV_ERROR( Code, Msg )                                       /  
{                                                                   /  
     cvError( (Code), cvFuncName, Msg, __FILE__, __LINE__ );        /  
     EXIT;                                                          /  

 /* CV_FUNCNAME macro defines icvFuncName constant which is used by CV_ERROR macro */
#ifdef CV_NO_FUNC_NAMES
    #define CV_FUNCNAME( Name )
    #define cvFuncName ""
#else  
    #define CV_FUNCNAME( Name )  /
    static char cvFuncName[] = Name
#endif
/*
  CV_ERROR macro unconditionally raises error with passed code and message.
  After raising error, control will be transferred to the exit label.
*/
#define CV_ERROR( Code, Msg )                                       /
{                                                                   /
     cvError( (Code), cvFuncName, Msg, __FILE__, __LINE__ );        /
     EXIT;                                                          /
}
 

2.

__BEGIN__ 和__END__配套使用,当出现error时,EXIT

cxerror.h 中

#define __BEGIN__       {
#define __END__         goto exit; exit: ; }
#define __CLEANUP__
#define EXIT            goto exit

对于代码中 __BEGIN__ 和__END__后面多加一个分号 的解释:

因为 __BEGIN__;等价于{; ,其中分号(;)为一个空语句,是合理的,但不要也行.__END__也一样.如

view plaincopy to clipboardprint?
int i;  
;  
;  
int b; 
int i;
;
;
int b;

这样的语法是正确的.


3.

CV_CN_MAX 64//通道数最大为64

CV_DEPTH_MAX = 8 = (1000)//位深最大为8

CV_MAT_TYPE_MASK 11111111 //511

CV_MAT_TYPE(flags)  ((flags) & CV_MAT_DEPTH_MASK)//flags与511相与还是flags,但可以保重flags在0到511之间

CV_MAT_DEPTH_MASK = 7 = (0111)//位深掩模,保证最大为8(其余数)

CV_MAT_CN_MASK = (111111, 000)//掩模

CV_MAT_CN求得通道数

CV_MAT_DEPTH求得深度,共8中 0 ~ 7

CV_ELEM_SIZE = 通道数 x DEPTH占字节数 = 通道数 >> X = 一个像素字节数

CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT))//将cn-1左移3位(即乘以8)后与depth相加


cxtypes.h中

view plaincopy to clipboardprint?
/* 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */ 
#define CV_ELEM_SIZE(type) /  
    (CV_MAT_CN(type) << ((((sizeof(size_t)/4+1)*16384|0x3a50) >> CV_MAT_DEPTH(type)*2) & 3))  
#define CV_CN_MAX     64  
#define CV_MAT_CN_MASK          ((CV_CN_MAX - 1) << CV_CN_SHIFT)  
#define CV_MAT_CN(flags)        ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1)  
#define CV_MAT_DEPTH(flags)     ((flags) & CV_MAT_DEPTH_MASK)  
#define CV_MAT_DEPTH_MASK       (CV_DEPTH_MAX - 1)  
#define CV_CN_SHIFT   3  
#define CV_DEPTH_MAX  (1 << CV_CN_SHIFT) 

 

理解OpenCV中的宏定义 CVAPI(函数返回类型)

读代码时看到语句 CVAPI(IplImage*)  cvCreateImage( CvSize size, int depth, int channels ); 遂起了解下这个CVAPI到底是怎么回...
  • wenhao_ir
  • wenhao_ir
  • 2016年05月20日 11:54
  • 1851

ReactiveCocoa的常见用法和常用宏

原文 常见用法 // 1.代替代理 // 需求:自定义redView,监听红色view中按钮点击 // 之前都是需要通过代理监听,给红色View添加一个代理属性,...
  • wxwd1
  • wxwd1
  • 2015年10月31日 15:05
  • 1371

复制简书上一篇基础文章

复制简书上一篇基础文章,很基础但是很受用  原文地址 本章主要介绍的是Android的绘图机制和处理技巧 1.屏幕尺寸的信息: 屏幕参数有屏幕大小即屏幕对角线的长度,用“...
  • ning_gg
  • ning_gg
  • 2016年02月17日 16:53
  • 656

OpenCV的一些宏

1、CV_MAKETYPE(depth,cn) 宏 作用:#define CV_MAKETYPE(depth,cn) 宏读入位深度depth和通道数cn生成矩阵类型type. Depth是位深度,...
  • lichengyu
  • lichengyu
  • 2010年11月10日 22:12
  • 6711

转载:宏定义的一些使用技巧总结

转自:http://dxf206.blog.163.com/blog/static/4227861200952511813462/  我在写代码的时候喜欢使用宏,不仅使代码看起来整洁,而且用好了还能极...
  • blogercn
  • blogercn
  • 2009年10月28日 10:50
  • 3636

OpenCV学习笔记(3)关于一个宏定义

CV_EVENT_LBUTTONDOWN CV_  :这是Opencv的标志,表明这个宏不是windows宏,是opencv定义的。 EVENT_ :表示是一个事件中要用的。 ...
  • u013270326
  • u013270326
  • 2017年05月22日 19:59
  • 151

iOS -- 常用pch宏 <二>

//屏幕宽、高 #define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width) #define SCREEN_HEIGHT ([UIScr...
  • xuejunrong
  • xuejunrong
  • 2016年04月19日 14:44
  • 462

CSDN的博文如何转载

最近发现CSDN的博客,是不能够转载的(或者说根本就没有转载连接;但是可以分享连接的,也只能分享微qq,人人,sina微博等非csdn博文)—— 最后在csdn官网上查看到,原来csdn是本着尊重原创...
  • u010700335
  • u010700335
  • 2014年05月28日 17:55
  • 2064

函数宏的优缺点

         老的C语言程序员中有一种倾向,就是把很短的执行频繁的计算写成宏,而不是定义为函数。完成I / O的g e t c h a r,做字符测试的i s d i g i t都是得到官方认可的...
  • linux510zcf
  • linux510zcf
  • 2009年11月09日 11:25
  • 4690

c中宏定义的特殊符号

在C/C++中,宏定义是由define完成的,define中有三个特殊的符号值得我们注意:1. #:在宏展开的时候会将#后面的参数替换成字符串,如:  #define p(exp) printf(#e...
  • ljx0305
  • ljx0305
  • 2010年04月07日 17:37
  • 2965
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【转载】opencv中的一些宏
举报原因:
原因补充:

(最多只允许输入30个字)