zoukankan      html  css  js  c++  java
  • opencv宏

    转自:http://blog.csdn.net/wqvbjhc/article/details/5496632

    1.

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

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

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

    cxerror.h 中

    1.  /* CV_FUNCNAME macro defines icvFuncName constant which is used by CV_ERROR macro */  
    2. #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__也一样.如

    1. int i;  
    2. ;  
    3. ;  
    4. 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中

    1. /* 0x3a50 = 11 10 10 01 01 00 00 ~ array of log2(sizeof(arr_type_elem)) */  
    2. #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)  
  • 相关阅读:
    计算机服务器分类
    二进制和十进制转换
    计算机发展历史
    Linux运维学习第二周记
    Linux运维学习第一周记
    使用正则表达式替换文件内容 分类: python 小练习 2013-08-13 15:07 332人阅读 评论(0) 收藏
    Python 中的 socket 编程 分类: socket 2013-08-10 17:17 377人阅读 评论(0) 收藏
    python简单的socket 服务器和客户端 分类: socket 2013-08-10 16:44 455人阅读 评论(0) 收藏
    Python Socket API 笔记 分类: socket 2013-08-10 15:06 2320人阅读 评论(0) 收藏
    vim 7的 无限回退功能 分类: ubuntu 2013-08-09 14:04 672人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/yingying0907/p/2603433.html
Copyright © 2011-2022 走看看