cv::alignPtr()
template<T> T* cv::alignPtr( // 返回T*类型指针
T* ptr, // 指针声明
int n = sizeof(T) // 指向内存的大小,为2的整数次幂大小
);
给定任意类型的指针,此函数将根据以下计算计算相同类型的指针:
(T*)(((size_t)ptr + n+1) & -n)
cv::alignSize()
size_t cv::alignSize( // >='sz'且被'n'整除的最小整数
size_t sz, // buffer大小
int n = sizeof(T) // 指向内存的大小,为2的整数次幂大小
);
给定数字n
(通常是sizeof()的返回值)和缓冲区sz
的大小,cv::alignSize()
计算此缓冲区为了包含大小为n
的整数个对象而应达到的大小,即大于或等于sz但被n整除的最小数字。使用以下公式:
(sz + n-1) & -n
cv::allocate()
template<T> T* cv::allocate( // 返回指向被分配内存的指针
size_t sz // buffer大小是sizeof(T)的整数倍
);
函数cv::allocate()
的功能类似于new
的数组形式,因为它分配由类型T
的n
个对象组成的数组,调用每个对象的默认构造函数,并返回指向数组中第一个对象的指针。
cv::deallocate()
template<T> void cv::deallocate(
T* ptr, // 返回指向被释放内存的指针
size_t sz // buffer大小是sizeof(T)的整数倍
);
函数cv::deallocate()
的功能类似于delete
的数组形式,因为它释放由类型T
的n个对象组成的数组,并为每个对象调用析构函数。cv::deallocate()
用于释放使用cv::allocate()
分配的对象。传递给cv::deallocate()
的元素数量n必须与最初使用cv::allocate()
分配的对象数量相同。
cv::fastAtan2()
float cv::fastAtan2(
float y,
float x
);
此函数计算x
,y
坐标的反正切值,并返回从原点到该点的角度。度数在0.0
到360.0
之间,包括0.0
,但不包括360.0
。
cvCeil()
int cvCeil(
float x
);
给定一个float x
,cvCeil()
计算不小于x
的最小整数。如果输入值超出了32位整数的范围,则结果为垃圾值。
cv::cubeRoot()
float cv::cubeRoot(
float x
);
此函数计算参数x
的立方根。x
为负的时候返回值为负。
cv::CV_Assert()
和CV_DbgAssert()
// example
CV_Assert( x!=0 )
cv::CV_Assert()
是一个宏,它将测试传递给它的表达式,如果表达式的计算结果为false
(或0
),它将抛出异常。如果仅在调试中进行测试,则使用CV_DbgAssert()
cv::CV_Error()
和CV_Error_()
// example
CV_Error( ecode, estring )
CV_Error_( ecode, fmt, ... )
宏cv::CV_Error()
接收错误代码参数ecode
和 const 字符串estring
,然后将它们打包到cv::Exception
中,然后传递给cv::error()
进行处理。如果需要动态构造消息字符串,则使用变量宏CV_Error_()
。CV_Error_()
接受与cv::CV_Error()
相同的ecode
,但随后需要一个spintf()
样式的格式字符串,后跟可变数量的参数,这与sprintf()
一样。
cv::error()
void cv::error(
const cv::Exception& ex // 要抛出的异常
);
此函数主要从cv::CV_Error()
和CV_Error_()
调用。如果代码是在非 debug 版本中编译的,它将抛出异常ex
。如果代码是在 debug 版本中编译的,它将故意引发内存访问冲突,以便堆栈和所有参数都可被调试器查看。
一半呢不会直接调用cv::error()
,而是依赖宏cv::CV_Error()
和CV_Error_()
抛出错误。这些宏获取异常中显示的信息,打包这些信息,并将产生的异常传递给cv::error()
。
cv::fastFree()
void cv::fastFree(
void* ptr // 指向被释放的内存
);
此函数释放使用cv::fastMalloc()
分配的缓冲区(下面将介绍)。
cv::fastMalloc()
void* cv::fastMalloc(
size_t size
);
cv::fastMalloc()
的工作方式与熟悉的malloc()
类似,不同之处在于它通常速度更快,并且可以对齐缓冲区大小。这意味着如果传递的缓冲区大小大于16字节,则返回的缓冲区将与16字节边界对齐。
cvFloor()
int cvFloor(
float x
};
和cvCeil()
类似,但是cvFloor()
返回不大于x
的最大整数。如果输入值超出32位整数可表示的范围,则结果为垃圾值。
cv::format()
string cv::format( // 返回 STL-string
const char* fmt, // 格式化字符串,比如sprintf()
... // 参数,比如sprintf()
);
这个函数本质上与标准库中的sprintf()
相同,但它不需要调用方提供字符缓冲区,而是构造一个STL字符串对象并返回该对象。它对于格式化Exception()
构造函数(它的参数中需要STL字符串)的错误消息特别方便。
cv::getCPUTickCount()
int64 cv::getCPUTickCount( void );
这个函数返回CPU节拍数。但是,此函数的返回值在许多体系架构上可能很难解释。具体地说,因为在多核系统上,线程可能在一个核上休眠,而在另一个核上唤醒,所以对cv::getCPUTickCount()
的两个后续调用的结果之间的差异可能完全没有意义。因此,除非确定自己知道自己在做什么,否则最好使用cv::getTickCount()
进行计时测量。此函数最适合初始化随机数生成器之类的任务。
cv::getNumThreads()
int cv::getNumThreads( void );
返回OpenCV当前线程数。
cv::getOptimalDFTSize()
int cv::getOptimalDFTSize( int n );
当调用cv::dft()
时,OpenCV用来计算转换的算法对传递给cv::dft()
的数组大小极为敏感。函数cv::getOptimalDFTSize()
将传递给cv::dft()
的数组的大小作为参数,并返回应该传递给cv::dft()
的数组的大小。OpenCV使用此信息创建一个更大的数组,你可以将数据复制到该数组中,并用零填充其余的部分。
cv::getThreadNum()
int cv::getThreadNum( void );
如果您的OpenCV库是使用OpenMP支持编译的,它将返回当前执行的线程的索引(从0开始)。
cv::getTickCount()
int64 cv::getTickCount( void );
此函数返回相对于某些依赖于体系结构的CPU节拍数。每个街拍的时间可以通过cv::getTickFrequency()
计算(下面将介绍)。对于大多数计时应用程序,此函数比cv::getCPUTickCount()
更可取,因为它不受底层问题的影响,例如线程运行在哪个内核上,以及自动调节cpu频率(大多数现代处理器出于电源管理原因这样做)。
cv::getTickFrequency()
double cv::getTickFrequency( void );
当cv::getTickCount()
用于计时分析时,节拍的确切含义通常取决于体系结构。函数cv::getTickFrequency()
计算时钟时间(即秒)和节拍之间的转换。
要计算发生某些特定事件(如执行函数)所需的时间,只需在函数调用前后调用cv::getTickCount()
,两数相减,再除以cv::getTickFrequency()
的值。
cvIsInf()
int cvIsInf( double x );
如果x
为正负无穷大,则cvIsInf()
的返回值为1
,否则为0
。无穷大测试是 IEEE754 标准的测试。
cvIsNaN()
int cvIsNan( double x );
如果x
“不是数字”,则cvIsNaN()
的返回值为1
,否则返回值为0
。NAN 测试是 IEEE754 标准测试。
cvRound()
int cvRound( double x );
计算最接近x
的整数。如果输入值超出了32位整数可表示的范围,则结果为垃圾值。
cv::setNumThreads()
void cv::setNumThreads( int nthreads );
编译OpenCV时启用OpenMP选项,此函数设置OpenCV将在并行OpenMP区域中使用的线程数。线程数的默认值是CPU上的逻辑核心数(即,如果我们有四个核心,每个核心有两个超线程,则默认情况下将有八个线程)。如果将nthread
设置为0
,则线程数将变为默认值。
cv::setUseOptimized()
void cv::setUseOptimized( bool on_off );
硬件层的优化,最好在最上层调用开启。
cv::useOptimized()
bool cv::useOptimized( void );
检查全局标志的状态——允许使用高性能优化的标志。只有在当前启用了这些优化时,才会返回True
;否则,此函数将返回False
。