OpenCV 4.11.0
开源计算机视觉
|
主题 | |
私有实现辅助函数 | |
“通用内联函数”是一组类型和函数,旨在简化不同平台上的代码向量化。目前支持不同架构上的几种不同的 SIMD 扩展。针对各种架构,包括 x86(**SSE/SSE2/SSE4.2**)、ARM(**NEON**)、PowerPC(**VSX**)、MIPS(**MSA**),实现了对各种类型的 128 位寄存器的支持。x86(**AVX2**)支持 256 位长寄存器,x86(**AVX512**)支持 512 位长寄存器。如果编译期间没有可用的 SIMD 扩展,则将选择内联函数的回退 C++ 实现,代码将按预期工作,尽管速度可能会较慢。
有几种类型表示打包值的向量寄存器,每种类型都实现为基于一个 SIMD 寄存器的结构。
列出类型的精确位长度(和值数量)是在编译时推断的,并且取决于在库编译期间选择的可用架构 SIMD 功能。所有类型都包含 **nlanes** 枚举,用于检查类型的精确值数量。
如果类型的精确位长度很重要,则可以使用特定固定长度的寄存器类型。
有几种类型表示 128 位寄存器。
有几种类型表示 256 位寄存器。
有几种类型表示 512 位寄存器。
这些操作允许显式设置寄存器的内容,或者通过从某个内存块加载寄存器来设置内容,以及将寄存器的内容保存到内存块。
存在可变大小的寄存器加载操作,这些操作根据所选平台的功能提供最大可用大小的结果。
还有固定大小寄存器加载/存储操作。
对于128位寄存器
对于256位寄存器(检查CV_SIMD256预处理器定义)
对于512位寄存器(检查CV_SIMD512预处理器定义)
内存存储操作在不同的平台功能上类似:v_store,v_store_aligned,v_store_high,v_store_low
这些操作允许在一个或多个向量中重新排序或重新组合元素。
逐元素二元和一元运算。
大多数这些操作只返回一个值。
不同的类型转换和强制转换
在这些运算中,向量表示矩阵行/列:v_dotprod,v_dotprod_fast,v_dotprod_expand,v_dotprod_expand_fast,v_matmul,v_transpose4x4
大多数操作仅针对可用类型的一个子集实现,下表显示了不同操作对类型的适用性。
普通整数
操作\类型 | uint 8 | int 8 | uint 16 | int 16 | uint 32 | int 32 |
---|---|---|---|---|---|---|
加载,存储 | x | x | x | x | x | x |
交错 | x | x | x | x | x | x |
扩展 | x | x | x | x | x | x |
低位扩展 | x | x | x | x | x | x |
高位扩展 | x | x | x | x | x | x |
四分之一扩展 | x | x | ||||
加,减 | x | x | x | x | x | x |
溢出加,溢出减 | x | x | x | x | ||
溢出乘 | x | x | x | x | ||
乘 | x | x | x | x | x | x |
扩展乘 | x | x | x | x | x | |
比较 | x | x | x | x | x | x |
移位 | x | x | x | x | ||
点积 | x | x | ||||
快速点积 | x | x | ||||
扩展点积 | x | x | x | x | x | |
快速扩展点积 | x | x | x | x | x | |
逻辑运算 | x | x | x | x | x | x |
最小值,最大值 | x | x | x | x | x | x |
绝对差 | x | x | x | x | x | x |
绝对差集 | x | x | ||||
归约 | x | x | x | x | x | x |
掩码 | x | x | x | x | x | x |
打包 | x | x | x | x | x | x |
无符号打包 | x | x | ||||
带符号打包 | x | |||||
解包 | x | x | x | x | x | x |
提取 | x | x | x | x | x | x |
旋转(通道) | x | x | x | x | x | x |
转换为float32 | x | |||||
转换为float64 | x | |||||
4x4转置 | x | x | ||||
反转 | x | x | x | x | x | x |
提取n | x | x | x | x | x | x |
广播元素 | x | x |
大整数
操作\类型 | uint 64 | int 64 |
---|---|---|
加载,存储 | x | x |
加,减 | x | x |
移位 | x | x |
逻辑运算 | x | x |
反转 | x | x |
提取 | x | x |
旋转(通道) | x | x |
转换为float64 | x | |
提取n | x | x |
浮点数
操作\类型 | float 32 | float 64 |
---|---|---|
加载,存储 | x | x |
交错 | x | |
加,减 | x | x |
乘 | x | x |
除法 | x | x |
比较 | x | x |
最小值,最大值 | x | x |
绝对差 | x | x |
归约 | x | |
掩码 | x | x |
解包 | x | x |
转换为float32 | x | |
转换为float64 | x | |
平方根,绝对值 | x | x |
浮点数学函数 | x | x |
4x4转置 | x | |
提取 | x | x |
旋转(通道) | x | x |
反转 | x | x |
提取n | x | x |
广播元素 | x | |
指数 | x | x |
对数 | x | x |
正弦,余弦 | x | x |
类 | |
结构体 | cv::v_reg< _Tp, n > |
宏 | |
#define | OPENCV_HAL_MATH_HAVE_EXP 1 |
类型定义 | |
typedef v_float32x16 | simd512::v_float32 |
最大可用向量寄存器容量:32位浮点数(单精度) | |
typedef v_reg< float, 16 > | cv::v_float32x16 |
十六个32位浮点数(单精度) | |
typedef v_reg< float, 4 > | cv::v_float32x4 |
四个32位浮点数(单精度) | |
typedef v_reg< float, 8 > | cv::v_float32x8 |
八个32位浮点数(单精度) | |
typedef v_float64x8 | simd512::v_float64 |
最大可用向量寄存器容量:64位浮点数(双精度) | |
typedef v_reg< double, 2 > | cv::v_float64x2 |
两个64位浮点数(双精度) | |
typedef v_reg< double, 4 > | cv::v_float64x4 |
四个64位浮点数(双精度) | |
typedef v_reg< double, 8 > | cv::v_float64x8 |
八个64位浮点数(双精度) | |
typedef v_int16x32 | simd512::v_int16 |
最大可用向量寄存器容量:16位有符号整数。 | |
typedef v_reg< short, 16 > | cv::v_int16x16 |
十六个16位有符号整数。 | |
typedef v_reg< short, 32 > | cv::v_int16x32 |
三十二个16位有符号整数。 | |
typedef v_reg< short, 8 > | cv::v_int16x8 |
八个16位有符号整数。 | |
typedef v_int32x16 | simd512::v_int32 |
最大可用向量寄存器容量:32位有符号整数。 | |
typedef v_reg< int, 16 > | cv::v_int32x16 |
十六个32位有符号整数。 | |
typedef v_reg< int, 4 > | cv::v_int32x4 |
四个32位有符号整数。 | |
typedef v_reg< int, 8 > | cv::v_int32x8 |
八个32位有符号整数。 | |
typedef v_int64x8 | simd512::v_int64 |
最大可用向量寄存器容量:64位有符号整数。 | |
typedef v_reg< int64, 2 > | cv::v_int64x2 |
两个64位有符号整数。 | |
typedef v_reg< int64, 4 > | cv::v_int64x4 |
四个64位有符号整数。 | |
typedef v_reg< int64, 8 > | cv::v_int64x8 |
八个64位有符号整数。 | |
typedef v_int8x64 | simd512::v_int8 |
最大可用向量寄存器容量:8位有符号整数。 | |
typedef v_reg< schar, 16 > | cv::v_int8x16 |
十六个8位有符号整数。 | |
typedef v_reg< schar, 32 > | cv::v_int8x32 |
三十二个8位有符号整数。 | |
typedef v_reg< schar, 64 > | cv::v_int8x64 |
六十四个8位有符号整数。 | |
typedef v_uint16x32 | simd512::v_uint16 |
最大可用向量寄存器容量:16位无符号整数。 | |
typedef v_reg< ushort, 16 > | cv::v_uint16x16 |
十六个16位无符号整数。 | |
typedef v_reg< ushort, 32 > | cv::v_uint16x32 |
三十二个16位无符号整数。 | |
typedef v_reg< ushort, 8 > | cv::v_uint16x8 |
八个16位无符号整数。 | |
typedef v_uint32x16 | simd512::v_uint32 |
最大可用向量寄存器容量:32位无符号整数。 | |
typedef v_reg< unsigned, 16 > | cv::v_uint32x16 |
十六个32位无符号整数。 | |
typedef v_reg< unsigned, 4 > | cv::v_uint32x4 |
四个32位无符号整数。 | |
typedef v_reg< unsigned, 8 > | cv::v_uint32x8 |
八个32位无符号整数。 | |
typedef v_uint64x8 | simd512::v_uint64 |
最大可用向量寄存器容量:64位无符号整数。 | |
typedef v_reg< uint64, 2 > | cv::v_uint64x2 |
两个64位无符号整数。 | |
typedef v_reg< uint64, 4 > | cv::v_uint64x4 |
四个64位无符号整数。 | |
typedef v_reg< uint64, 8 > | cv::v_uint64x8 |
八个64位无符号整数。 | |
typedef v_uint8x64 | simd512::v_uint8 |
最大可用向量寄存器容量的8位无符号整数。 | |
typedef v_reg< uchar, 16 > | cv::v_uint8x16 |
十六个8位无符号整数。 | |
typedef v_reg< uchar, 32 > | cv::v_uint8x32 |
三十二个8位无符号整数。 | |
typedef v_reg< uchar, 64 > | cv::v_uint8x64 |
六十四个8位无符号整数。 | |
枚举 | |
enum | { cv::simd128_width = 16 , cv::simd256_width = 32 , cv::simd512_width = 64 , cv::simdmax_width = simd512_width } |
函数 | |
void | cv::v256_cleanup () |
template<typename _Tp > | |
v_reg< _Tp, simd256_width/sizeof(_Tp)> | cv::v256_load (const _Tp *ptr) |
从内存加载256位长度的寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd256_width/sizeof(_Tp)> | cv::v256_load_aligned (const _Tp *ptr) |
从内存加载寄存器内容(已对齐) | |
template<typename _Tp > | |
v_reg< typename V_TypeTraits< _Tp >::w_type, simd256_width/sizeof(typename V_TypeTraits< _Tp >::w_type)> | cv::v256_load_expand (const _Tp *ptr) |
使用双倍扩展从内存加载寄存器内容。 | |
v_reg< float, simd256_width/sizeof(float)> | cv::v256_load_expand (const hfloat *ptr) |
template<typename _Tp > | |
v_reg< typename V_TypeTraits< _Tp >::q_type, simd256_width/sizeof(typename V_TypeTraits< _Tp >::q_type)> | cv::v256_load_expand_q (const _Tp *ptr) |
使用四倍扩展从内存加载寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd256_width/sizeof(_Tp)> | cv::v256_load_halves (const _Tp *loptr, const _Tp *hiptr) |
从两个内存块加载寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd256_width/sizeof(_Tp)> | cv::v256_load_low (const _Tp *ptr) |
将128位数据加载到低位部分(高位部分未定义)。 | |
void | cv::v512_cleanup () |
template<typename _Tp > | |
v_reg< _Tp, simd512_width/sizeof(_Tp)> | cv::v512_load (const _Tp *ptr) |
从内存加载512位长度的寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd512_width/sizeof(_Tp)> | cv::v512_load_aligned (const _Tp *ptr) |
从内存加载寄存器内容(已对齐) | |
template<typename _Tp > | |
v_reg< typename V_TypeTraits< _Tp >::w_type, simd512_width/sizeof(typename V_TypeTraits< _Tp >::w_type)> | cv::v512_load_expand (const _Tp *ptr) |
使用双倍扩展从内存加载寄存器内容。 | |
v_reg< float, simd512_width/sizeof(float)> | cv::v512_load_expand (const hfloat *ptr) |
template<typename _Tp > | |
v_reg< typename V_TypeTraits< _Tp >::q_type, simd512_width/sizeof(typename V_TypeTraits< _Tp >::q_type)> | cv::v512_load_expand_q (const _Tp *ptr) |
使用四倍扩展从内存加载寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd512_width/sizeof(_Tp)> | cv::v512_load_halves (const _Tp *loptr, const _Tp *hiptr) |
从两个内存块加载寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd512_width/sizeof(_Tp)> | cv::v512_load_low (const _Tp *ptr) |
将256位数据加载到低位部分(高位部分未定义)。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::abs_type, n > | cv::v_abs (const v_reg< _Tp, n > &a) |
元素的绝对值。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::abs_type, n > | cv::v_absdiff (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
绝对差值。 | |
template<int n> | |
v_reg< double, n > | cv::v_absdiff (const v_reg< double, n > &a, const v_reg< double, n > &b) |
template<int n> | |
v_reg< float, n > | cv::v_absdiff (const v_reg< float, n > &a, const v_reg< float, n > &b) |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_absdiffs (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
饱和绝对差值。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_add (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
添加值。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_add_wrap (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
无饱和添加值。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_and (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
按位与。 | |
template<int i, typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_broadcast_element (const v_reg< _Tp, n > &a) |
广播向量的第 i 个元素。 | |
template<int n> | |
v_reg< int, n *2 > | cv::v_ceil (const v_reg< double, n > &a) |
template<int n> | |
v_reg< int, n > | cv::v_ceil (const v_reg< float, n > &a) |
向上取整元素。 | |
template<typename _Tp , int n> | |
bool | cv::v_check_all (const v_reg< _Tp, n > &a) |
检查所有打包的值是否小于零。 | |
template<typename _Tp , int n> | |
bool | cv::v_check_any (const v_reg< _Tp, n > &a) |
检查任何打包的值是否小于零。 | |
void | cv::v_cleanup () |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_combine_high (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
从两个向量的最后一个元素组合向量。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_combine_low (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
从两个向量的第一个元素组合向量。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_cos (const v_reg< _Tp, n > &a) |
元素的余弦 \( cos(x) \)。 | |
template<int n> | |
v_reg< float, n *2 > | cv::v_cvt_f32 (const v_reg< double, n > &a) |
将下半部分转换为浮点数。 | |
template<int n> | |
v_reg< float, n *2 > | cv::v_cvt_f32 (const v_reg< double, n > &a, const v_reg< double, n > &b) |
转换为浮点数。 | |
template<int n> | |
v_reg< float, n > | cv::v_cvt_f32 (const v_reg< int, n > &a) |
转换为浮点数。 | |
template<int n> | |
v_reg< double,(n/2)> | cv::v_cvt_f64 (const v_reg< float, n > &a) |
将下半部分转换为双精度浮点数。 | |
template<int n> | |
v_reg< double, n/2 > | cv::v_cvt_f64 (const v_reg< int, n > &a) |
将下半部分转换为双精度浮点数。 | |
template<int n> | |
v_reg< double, n > | cv::v_cvt_f64 (const v_reg< int64, n > &a) |
转换为双精度浮点数。 | |
template<int n> | |
v_reg< double,(n/2)> | cv::v_cvt_f64_high (const v_reg< float, n > &a) |
将向量的上半部分转换为双精度浮点数。 | |
template<int n> | |
v_reg< double,(n/2)> | cv::v_cvt_f64_high (const v_reg< int, n > &a) |
将向量的上半部分转换为双精度浮点数。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_div (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
除法运算。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_dotprod (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
元素的点积。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_dotprod (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &c) |
元素的点积。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > | cv::v_dotprod_expand (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
元素的点积并扩展。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > | cv::v_dotprod_expand (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > &c) |
元素的点积。 | |
template<int n> | |
v_reg< double, n/2 > | cv::v_dotprod_expand (const v_reg< int, n > &a, const v_reg< int, n > &b) |
template<int n> | |
v_reg< double, n/2 > | cv::v_dotprod_expand (const v_reg< int, n > &a, const v_reg< int, n > &b, const v_reg< double, n/2 > &c) |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > | cv::v_dotprod_expand_fast (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
快速计算元素的点积并扩展。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > | cv::v_dotprod_expand_fast (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< typename V_TypeTraits< _Tp >::q_type, n/4 > &c) |
快速计算元素的点积。 | |
template<int n> | |
v_reg< double, n/2 > | cv::v_dotprod_expand_fast (const v_reg< int, n > &a, const v_reg< int, n > &b) |
template<int n> | |
v_reg< double, n/2 > | cv::v_dotprod_expand_fast (const v_reg< int, n > &a, const v_reg< int, n > &b, const v_reg< double, n/2 > &c) |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_dotprod_fast (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
快速计算元素的点积。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_dotprod_fast (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &c) |
快速计算元素的点积。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_eq (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
相等比较。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_erf (const v_reg< _Tp, n > &a) |
误差函数。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_exp (const v_reg< _Tp, n > &a) |
元素的指数 \( e^x \)。 | |
template<typename _Tp , int n> | |
void | cv::v_expand (const v_reg< _Tp, n > &a, v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &b0, v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &b1) |
将值扩展到更宽的打包类型。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_expand_high (const v_reg< _Tp, n > &a) |
将较高的值扩展到更宽的打包类型。 | |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > | cv::v_expand_low (const v_reg< _Tp, n > &a) |
将较低的值扩展到更宽的打包类型。 | |
template<int s, typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_extract (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
向量提取。 | |
template<int s, typename _Tp , int n> | |
_Tp | cv::v_extract_n (const v_reg< _Tp, n > &v) |
向量提取。 | |
template<int n> | |
v_reg< int, n *2 > | cv::v_floor (const v_reg< double, n > &a) |
template<int n> | |
v_reg< int, n > | cv::v_floor (const v_reg< float, n > &a) |
向下取整元素。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_fma (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< _Tp, n > &c) |
乘法和加法。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_ge (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
大于或等于比较。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_gt (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
大于比较。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_interleave_pairs (const v_reg< _Tp, n > &vec) |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_interleave_quads (const v_reg< _Tp, n > &vec) |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_invsqrt (const v_reg< _Tp, n > &a) |
倒数平方根。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_le (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
小于或等于比较。 | |
template<typename _Tp > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load (const _Tp *ptr) |
从内存加载寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load_aligned (const _Tp *ptr) |
从内存加载寄存器内容(已对齐) | |
template<typename _Tp , int n> | |
void | cv::v_load_deinterleave (const _Tp *ptr, v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
加载并解交错 (2 个通道) | |
template<typename _Tp , int n> | |
void | cv::v_load_deinterleave (const _Tp *ptr, v_reg< _Tp, n > &a, v_reg< _Tp, n > &b, v_reg< _Tp, n > &c) |
加载并解交错 (3 个通道) | |
template<typename _Tp , int n> | |
void | cv::v_load_deinterleave (const _Tp *ptr, v_reg< _Tp, n > &a, v_reg< _Tp, n > &b, v_reg< _Tp, n > &c, v_reg< _Tp, n > &d) |
加载并解交错 (4 个通道) | |
template<typename _Tp > | |
v_reg< typename V_TypeTraits< _Tp >::w_type, simd128_width/sizeof(typename V_TypeTraits< _Tp >::w_type)> | cv::v_load_expand (const _Tp *ptr) |
使用双倍扩展从内存加载寄存器内容。 | |
v_reg< float, simd128_width/sizeof(float)> | cv::v_load_expand (hfloat *ptr) |
template<typename _Tp > | |
v_reg< typename V_TypeTraits< _Tp >::q_type, simd128_width/sizeof(typename V_TypeTraits< _Tp >::q_type)> | cv::v_load_expand_q (_Tp *ptr) |
使用四倍扩展从内存加载寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load_halves (_Tp *loptr, _Tp *hiptr) |
从两个内存块加载寄存器内容。 | |
template<typename _Tp > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_load_low (_Tp *ptr) |
加载64位数据到低位部分(高位部分未定义)。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_log (v_reg< _Tp, n > &a) |
元素的自然对数 \( \log(x) \)。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_lt (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
小于比较。 | |
template<typename _Tp > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_lut (_Tp *tab, int *idx) |
template<int n> | |
v_reg< double, n/2 > | cv::v_lut (const double *tab, const v_reg< int, n > &idx) |
template<int n> | |
v_reg< float, n > | cv::v_lut (const float *tab, const v_reg< int, n > &idx) |
template<int n> | |
v_reg< int, n > | cv::v_lut (const int *tab, const v_reg< int, n > &idx) |
template<int n> | |
v_reg< unsigned, n > | cv::v_lut (const unsigned *tab, const v_reg< int, n > &idx) |
template<int n> | |
void | cv::v_lut_deinterleave (const double *tab, const v_reg< int, n *2 > &idx, v_reg< double, n > &x, v_reg< double, n > &y) |
template<int n> | |
void | cv::v_lut_deinterleave (const float *tab, const v_reg< int, n > &idx, v_reg< float, n > &x, v_reg< float, n > &y) |
template<typename _Tp > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_lut_pairs (_Tp *tab, int *idx) |
template<typename _Tp > | |
v_reg< _Tp, simd128_width/sizeof(_Tp)> | cv::v_lut_quads (_Tp *tab, int *idx) |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_magnitude (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
幅度。 | |
template<int n> | |
v_reg< float, n > | cv::v_matmul (v_reg< float, n > &v, v_reg< float, n > &a, v_reg< float, n > &b, v_reg< float, n > &c, v_reg< float, n > &d) |
矩阵乘法。 | |
template<int n> | |
v_reg< float, n > | cv::v_matmuladd (v_reg< float, n > &v, v_reg< float, n > &a, v_reg< float, n > &b, v_reg< float, n > &c, v_reg< float, n > &d) |
矩阵乘法和加法。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_max (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
为每一对选择最大值。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_min (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
为每一对选择最小值。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_mul (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
乘法运算。 | |
template<typename _Tp , int n> | |
void | cv::v_mul_expand (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b, v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &c, v_reg< typename V_TypeTraits< _Tp >::w_type, n/2 > &d) |
乘法和扩展。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_mul_hi (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
乘法并提取高位部分。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_mul_wrap (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
无饱和乘法运算。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_muladd (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b, v_reg< _Tp, n > &c) |
v_fma 的同义词。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_ne (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
不相等比较。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_not (v_reg< _Tp, n > &a) |
按位非。 | |
template<int n> | |
v_reg< double, n > | cv::v_not_nan (v_reg< double, n > &a) |
template<int n> | |
v_reg< float, n > | cv::v_not_nan (v_reg< float, n > &a) |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_or (v_reg< _Tp, n > &a, v_reg< _Tp, n > &b) |
按位或。 | |
template<int n> | |
void | cv::v_pack_store (hfloat *ptr, const v_reg< float, n > &v) |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_pack_triplets (v_reg< _Tp, n > &vec) |
template<typename _Tp , int n> | |
v_reg< typename V_TypeTraits< _Tp >::abs_type, n > | cv::v_popcount (const v_reg< _Tp, n > &a) |
统计向量通道中的1比特数,并以对应的无符号类型返回结果。 | |
template<typename _Tp , int n> | |
void | cv::v_recombine (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, v_reg< _Tp, n > &low, v_reg< _Tp, n > &high) |
将两个向量组合成另外两个向量的低位和高位部分。 | |
template<typename _Tp , int n> | |
_Tp | cv::v_reduce_max (const v_reg< _Tp, n > &a) |
查找一个最大值。 | |
template<typename _Tp , int n> | |
_Tp | cv::v_reduce_min (const v_reg< _Tp, n > &a) |
查找一个最小值。 | |
template<typename _Tp , int n> | |
V_TypeTraits< typenameV_TypeTraits< _Tp >::abs_type >::sum_type | cv::v_reduce_sad (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
计算值的绝对差之和。 | |
template<typename _Tp , int n> | |
V_TypeTraits< _Tp >::sum_type | cv::v_reduce_sum (const v_reg< _Tp, n > &a) |
计算打包值的和。 | |
template<int n> | |
v_reg< float, n > | cv::v_reduce_sum4 (const v_reg< float, n > &a, const v_reg< float, n > &b, const v_reg< float, n > &c, const v_reg< float, n > &d) |
计算每个输入向量的所有元素之和,返回和的向量。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_reverse (const v_reg< _Tp, n > &a) |
向量反转顺序。 | |
template<int imm, typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_rotate_left (const v_reg< _Tp, n > &a) |
向量中元素左移。 | |
template<int imm, typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_rotate_left (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<int imm, typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_rotate_right (const v_reg< _Tp, n > &a) |
向量中元素右移。 | |
template<int imm, typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_rotate_right (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
template<int n> | |
v_reg< int, n *2 > | cv::v_round (const v_reg< double, n > &a) |
template<int n> | |
v_reg< int, n *2 > | cv::v_round (const v_reg< double, n > &a, const v_reg< double, n > &b) |
template<int n> | |
v_reg< int, n > | cv::v_round (const v_reg< float, n > &a) |
对元素进行四舍五入。 | |
template<typename _Tp , int n> | |
int | cv::v_scan_forward (const v_reg< _Tp, n > &a) |
获取第一个负数通道索引。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_select (const v_reg< _Tp, n > &mask, const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
按元素选择(混合操作) | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_shl (const v_reg< _Tp, n > &a, int imm) |
按位左移。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_shr (const v_reg< _Tp, n > &a, int imm) |
按位右移。 | |
template<typename _Tp , int n> | |
int | cv::v_signmask (const v_reg< _Tp, n > &a) |
获取负值掩码。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_sin (const v_reg< _Tp, n > &a) |
计算元素的正弦值 \( sin(x) \)。 | |
template<typename _Tp , int n> | |
void | cv::v_sincos (const v_reg< _Tp, n > &x, v_reg< _Tp, n > &s, v_reg< _Tp, n > &c) |
同时计算元素的正弦值 \( sin(x) \) 和余弦值 \( cos(x) \)。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_sqr_magnitude (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
幅度的平方。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_sqrt (const v_reg< _Tp, n > &a) |
计算元素的平方根。 | |
template<typename _Tp , int n> | |
void | cv::v_store (_Tp *ptr, const v_reg< _Tp, n > &a) |
将数据存储到内存中。 | |
template<typename _Tp , int n> | |
void | cv::v_store (_Tp *ptr, const v_reg< _Tp, n > &a, hal::StoreMode) |
template<typename _Tp , int n> | |
void | cv::v_store_aligned (_Tp *ptr, const v_reg< _Tp, n > &a) |
将数据存储到内存中(已对齐) | |
template<typename _Tp , int n> | |
void | cv::v_store_aligned (_Tp *ptr, const v_reg< _Tp, n > &a, hal::StoreMode) |
template<typename _Tp , int n> | |
void | cv::v_store_aligned_nocache (_Tp *ptr, const v_reg< _Tp, n > &a) |
template<typename _Tp , int n> | |
void | cv::v_store_high (_Tp *ptr, const v_reg< _Tp, n > &a) |
将数据存储到内存(高半部分) | |
template<typename _Tp , int n> | |
void | cv::v_store_interleave (_Tp *ptr, const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< _Tp, n > &c, const v_reg< _Tp, n > &d, hal::StoreMode=hal::STORE_UNALIGNED) |
交叉存储 (4通道) | |
template<typename _Tp , int n> | |
void | cv::v_store_interleave (_Tp *ptr, const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, const v_reg< _Tp, n > &c, hal::StoreMode=hal::STORE_UNALIGNED) |
交叉存储 (3通道) | |
template<typename _Tp , int n> | |
void | cv::v_store_interleave (_Tp *ptr, const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b, hal::StoreMode=hal::STORE_UNALIGNED) |
交叉存储 (2通道) | |
template<typename _Tp , int n> | |
void | cv::v_store_low (_Tp *ptr, const v_reg< _Tp, n > &a) |
将数据存储到内存(低半部分) | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_sub (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
减法运算。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_sub_wrap (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
无饱和减法运算。 | |
template<typename _Tp , int n> | |
void | cv::v_transpose4x4 (v_reg< _Tp, n > &a0, const v_reg< _Tp, n > &a1, const v_reg< _Tp, n > &a2, const v_reg< _Tp, n > &a3, v_reg< _Tp, n > &b0, v_reg< _Tp, n > &b1, v_reg< _Tp, n > &b2, v_reg< _Tp, n > &b3) |
转置 4x4 矩阵。 | |
template<int n> | |
v_reg< int, n *2 > | cv::v_trunc (const v_reg< double, n > &a) |
template<int n> | |
v_reg< int, n > | cv::v_trunc (const v_reg< float, n > &a) |
截断元素。 | |
template<typename _Tp , int n> | |
v_reg< _Tp, n > | cv::v_xor (const v_reg< _Tp, n > &a, const v_reg< _Tp, n > &b) |
按位异或。 | |
template<typename _Tp , int n> | |
void | cv::v_zip (const v_reg< _Tp, n > &a0, const v_reg< _Tp, n > &a1, v_reg< _Tp, n > &b0, v_reg< _Tp, n > &b1) |
交叉两个向量。 | |
变量 | |
静态常量 unsigned char | cv::popCountTable [] |
重新解释 | |
在不修改底层数据的情况下将向量转换为不同的类型。 | |
template<typename _Tp0 , int n0> | |
v_reg< uchar, n0 *sizeof(_Tp0)/sizeof(uchar)> | cv::v_reinterpret_as_u8 (const v_reg< _Tp0, n0 > &a) |
template<typename _Tp0 , int n0> | |
v_reg< schar, n0 *sizeof(_Tp0)/sizeof(schar)> | cv::v_reinterpret_as_s8 (const v_reg< _Tp0, n0 > &a) |
template<typename _Tp0 , int n0> | |
v_reg< ushort, n0 *sizeof(_Tp0)/sizeof(ushort)> | cv::v_reinterpret_as_u16 (const v_reg< _Tp0, n0 > &a) |
template<typename _Tp0 , int n0> | |
v_reg< short, n0 *sizeof(_Tp0)/sizeof(short)> | cv::v_reinterpret_as_s16 (const v_reg< _Tp0, n0 > &a) |
template<typename _Tp0 , int n0> | |
v_reg< unsigned, n0 *sizeof(_Tp0)/sizeof(unsigned)> | cv::v_reinterpret_as_u32 (const v_reg< _Tp0, n0 > &a) |
template<typename _Tp0 , int n0> | |
v_reg< int, n0 *sizeof(_Tp0)/sizeof(int)> | cv::v_reinterpret_as_s32 (const v_reg< _Tp0, n0 > &a) |
template<typename _Tp0 , int n0> | |
v_reg< float, n0 *sizeof(_Tp0)/sizeof(float)> | cv::v_reinterpret_as_f32 (const v_reg< _Tp0, n0 > &a) |
template<typename _Tp0 , int n0> | |
v_reg< double, n0 *sizeof(_Tp0)/sizeof(double)> | cv::v_reinterpret_as_f64 (const v_reg< _Tp0, n0 > &a) |
template<typename _Tp0 , int n0> | |
cv::v_reg< cv::uint64, n0 * sizeof(_Tp0) / sizeof(cv::uint64)> | cv::v_reinterpret_as_u64 (const cv::v_reg< _Tp0, n0 > &a ) |
template<typename _Tp0 , int n0> | |
cv::v_reg< cv::int64, n0 * sizeof(_Tp0) / sizeof(cv::int64)> | cv::v_reinterpret_as_s64 (const cv::v_reg< _Tp0, n0 > &a ) |
左移 | |
左移位 | |
template<int shift, int n> | |
cv::v_reg< cv::ushort, n > | cv::v_shl (const cv::v_reg< cv::ushort, n > &a ) |
template<int shift, int n> | |
cv::v_reg< short, n > | cv::v_shl (const cv::v_reg< short, n > &a ) |
template<int shift, int n> | |
v_reg< unsigned, n > | cv::v_shl (const cv::v_reg< unsigned, n > &a ) |
template<int shift, int n> | |
v_reg< int, n > | cv::v_shl (const cv::v_reg< int, n > &a ) |
template<int shift, int n> | |
cv::v_reg< cv::uint64, n > | cv::v_shl (const cv::v_reg< cv::uint64, n > &a ) |
template<int shift, int n> | |
cv::v_reg< cv::int64, n > | cv::v_shl (const cv::v_reg< cv::int64, n > &a ) |
右移 | |
右移位 | |
template<int shift, int n> | |
cv::v_reg< cv::ushort, n > | cv::v_shr (const cv::v_reg< cv::ushort, n > &a ) |
template<int shift, int n> | |
cv::v_reg< short, n > | cv::v_shr (const cv::v_reg< short, n > &a ) |
template<int shift, int n> | |
v_reg< unsigned, n > | cv::v_shr (const cv::v_reg< unsigned, n > &a ) |
template<int shift, int n> | |
v_reg< int, n > | cv::v_shr (const cv::v_reg< int, n > &a ) |
template<int shift, int n> | |
cv::v_reg< cv::uint64, n > | cv::v_shr (const cv::v_reg< cv::uint64, n > &a ) |
template<int shift, int n> | |
cv::v_reg< cv::int64, n > | cv::v_shr (const cv::v_reg< cv::int64, n > &a ) |
舍入移位 | |
舍入右移位 | |
template<int shift, int n> | |
cv::v_reg< cv::ushort, n > | cv::v_rshr (const cv::v_reg< cv::ushort, n > &a ) |
template<int shift, int n> | |
cv::v_reg< short, n > | cv::v_rshr (const cv::v_reg< short, n > &a ) |
template<int shift, int n> | |
v_reg< unsigned, n > | cv::v_rshr (const cv::v_reg< unsigned, n > &a ) |
template<int shift, int n> | |
v_reg< int, n > | cv::v_rshr (const cv::v_reg< int, n > &a ) |
template<int shift, int n> | |
cv::v_reg< cv::uint64, n > | cv::v_rshr (const cv::v_reg< cv::uint64, n > &a ) |
template<int shift, int n> | |
cv::v_reg< cv::int64, n > | cv::v_rshr (const cv::v_reg< cv::int64, n > &a ) |
打包 | |
将两个向量中的值打包到一个向量中 返回的向量类型元素个数是输入向量类型元素个数的两倍。带有 _u 后缀的变体也会转换为相应的无符号类型。
| |
template<int n> | |
cv::v_reg< cv::uchar, 2 * n > | cv::v_pack (const cv::v_reg< cv::ushort, n > &a , const cv::v_reg< cv::ushort, n > &b ) |
template<int n> | |
cv::v_reg< cv::schar, 2 * n > | cv::v_pack (const cv::v_reg< short, n > &a , const cv::v_reg< short, n > &b ) |
template<int n> | |
cv::v_reg< cv::ushort, 2 * n > | cv::v_pack (const cv::v_reg< unsigned, n > &a , const cv::v_reg< unsigned, n > &b ) |
template<int n> | |
cv::v_reg< short, 2 * n > | cv::v_pack (const cv::v_reg< int, n > &a , const cv::v_reg< int, n > &b ) |
template<int n> | |
cv::v_reg< unsigned, 2 * n > | cv::v_pack (const cv::v_reg< cv::uint64, n > &a , const cv::v_reg< cv::uint64, n > &b ) |
template<int n> | |
cv::v_reg< int, 2 * n > | cv::v_pack (const cv::v_reg< cv::int64, n > &a , const cv::v_reg< cv::int64, n > &b ) |
template<int n> | |
cv::v_reg< cv::uchar, 2 * n > | cv::v_pack_u (const cv::v_reg< short, n > &a , const cv::v_reg< short, n > &b ) |
template<int n> | |
cv::v_reg< cv::ushort, 2 * n > | cv::v_pack_u (const v_reg< int, n > &a, const v_reg< int, n > &b) |
带舍入移位的打包 | |
将两个向量中的值打包到一个向量中,并进行舍入移位 输入向量中的值将向右舍入移位n位,转换为较窄的类型,并返回到结果向量中。带有u后缀的变体转换为无符号类型。
| |
template<int shift, int n> | |
cv::v_reg< cv::uchar, 2 * n > | cv::v_rshr_pack (const v_reg< ushort, n > &a, const v_reg< ushort, n > &b) |
template<int shift, int n> | |
cv::v_reg< cv::schar, 2 * n > | cv::v_rshr_pack (const v_reg< short, n > &a, const v_reg< short, n > &b) |
template<int shift, int n> | |
cv::v_reg< cv::ushort, 2 * n > | cv::v_rshr_pack (const v_reg< unsigned, n > &a, const v_reg< unsigned, n > &b) |
template<int shift, int n> | |
cv::v_reg< short, 2 * n > | cv::v_rshr_pack (const v_reg< int, n > &a, const v_reg< int, n > &b) |
template<int shift, int n> | |
cv::v_reg< unsigned, 2 * n > | cv::v_rshr_pack (const v_reg< uint64, n > &a, const v_reg< uint64, n > &b) |
template<int shift, int n> | |
cv::v_reg< int, 2 * n > | cv::v_rshr_pack (const v_reg< int64, n > &a, const v_reg< int64, n > &b) |
template<int shift, int n> | |
cv::v_reg< cv::uchar, 2 * n > | cv::v_rshr_pack_u (const v_reg< short, n > &a, const v_reg< short, n > &b) |
template<int shift, int n> | |
cv::v_reg< cv::ushort, 2 * n > | cv::v_rshr_pack_u (const v_reg< int, n > &a, const v_reg< int, n > &b) |
打包和存储 | |
将输入向量中的值打包后存储到内存中 值将转换为较窄的类型后存储到内存中。带有u后缀的变体转换为相应的无符号类型。
| |
template<int n> | |
void | cv::v_pack_store (uchar *ptr, const v_reg< ushort, n > &a) |
template<int n> | |
void | cv::v_pack_store (schar *ptr, const v_reg< short, n > &a) |
template<int n> | |
void | cv::v_pack_store (ushort *ptr, const v_reg< unsigned, n > &a) |
template<int n> | |
void | cv::v_pack_store (short *ptr, const v_reg< int, n > &a) |
template<int n> | |
void | cv::v_pack_store (unsigned *ptr, const v_reg< uint64, n > &a) |
template<int n> | |
void | cv::v_pack_store (int *ptr, const v_reg< int64, n > &a) |
template<int n> | |
void | cv::v_pack_u_store (uchar *ptr, const v_reg< short, n > &a) |
template<int n> | |
void | cv::v_pack_u_store (ushort *ptr, const v_reg< int, n > &a) |
带舍入移位的打包和存储 | |
将输入向量中的值打包后存储到内存中 值将向右舍入移位n位,转换为较窄的类型,并存储到内存中。带有u后缀的变体转换为无符号类型。
| |
template<int shift, int n> | |
void | cv::v_rshr_pack_store (uchar *ptr, const v_reg< ushort, n > &a) |
template<int shift, int n> | |
void | cv::v_rshr_pack_store (schar *ptr, const v_reg< short, n > &a) |
template<int shift, int n> | |
void | cv::v_rshr_pack_store (ushort *ptr, const v_reg< unsigned, n > &a) |
template<int shift, int n> | |
void | cv::v_rshr_pack_store (short *ptr, const v_reg< int, n > &a) |
template<int shift, int n> | |
void | cv::v_rshr_pack_store (unsigned *ptr, const v_reg< uint64, n > &a) |
template<int shift, int n> | |
void | cv::v_rshr_pack_store (int *ptr, const v_reg< int64, n > &a) |
template<int shift, int n> | |
void | cv::v_rshr_pack_u_store (uchar *ptr, const v_reg< short, n > &a) |
template<int shift, int n> | |
void | cv::v_rshr_pack_u_store (ushort *ptr, const v_reg< int, n > &a) |
打包布尔值 | |
将多个向量中的布尔值打包到一个无符号8位整数向量中
| |
template<int n> | |
cv::v_reg< cv::uchar, 2 * n > | cv::v_pack_b (const v_reg< ushort, n > &a, const v_reg< ushort, n > &b) |
!对于16位布尔值 | |
template<int n> | |
v_reg< uchar, 4 *n > | cv::v_pack_b (const v_reg< unsigned, n > &a, const v_reg< unsigned, n > &b, const v_reg< unsigned, n > &c, const v_reg< unsigned, n > &d) |
template<int n> | |
v_reg< uchar, 8 *n > | cv::v_pack_b (const v_reg< uint64, n > &a, const v_reg< uint64, n > &b, const v_reg< uint64, n > &c, const v_reg< uint64, n > &d, const v_reg< uint64, n > &e, const v_reg< uint64, n > &f, const v_reg< uint64, n > &g, const v_reg< uint64, n > &h) |
#define OPENCV_HAL_MATH_HAVE_EXP 1 |
#include <opencv2/core/hal/intrin_cpp.hpp>
typedef v_float32x16 simd512::v_float32 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:32位浮点数(单精度)
typedef v_reg<float, 16> cv::v_float32x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
十六个32位浮点数(单精度)
typedef v_reg<float, 4> cv::v_float32x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
四个32位浮点数(单精度)
typedef v_reg<float, 8> cv::v_float32x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
八个32位浮点数(单精度)
typedef v_float64x8 simd512::v_float64 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:64位浮点数(双精度)
typedef v_reg<double, 2> cv::v_float64x2 |
#include <opencv2/core/hal/intrin_cpp.hpp>
两个64位浮点数(双精度)
typedef v_reg<double, 4> cv::v_float64x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
四个64位浮点数(双精度)
typedef v_reg<double, 8> cv::v_float64x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
八个64位浮点数(双精度)
typedef v_int16x32 simd512::v_int16 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:16位有符号整数。
typedef v_reg<short, 16> cv::v_int16x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
十六个16位有符号整数。
typedef v_reg<short, 32> cv::v_int16x32 |
#include <opencv2/core/hal/intrin_cpp.hpp>
三十二个16位有符号整数。
typedef v_reg<short, 8> cv::v_int16x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
八个16位有符号整数。
typedef v_int32x16 simd512::v_int32 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:32位有符号整数。
typedef v_reg<int, 16> cv::v_int32x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
十六个32位有符号整数。
typedef v_reg<int, 4> cv::v_int32x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
四个32位有符号整数。
typedef v_reg<int, 8> cv::v_int32x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
八个32位有符号整数。
typedef v_int64x8 simd512::v_int64 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:64位有符号整数。
typedef v_reg<int64, 2> cv::v_int64x2 |
#include <opencv2/core/hal/intrin_cpp.hpp>
两个64位有符号整数。
typedef v_reg<int64, 4> cv::v_int64x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
四个64位有符号整数。
typedef v_reg<int64, 8> cv::v_int64x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
八个64位有符号整数。
typedef v_int8x64 simd512::v_int8 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:8位有符号整数。
typedef v_reg<schar, 16> cv::v_int8x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
十六个8位有符号整数。
typedef v_reg<schar, 32> cv::v_int8x32 |
#include <opencv2/core/hal/intrin_cpp.hpp>
三十二个8位有符号整数。
typedef v_reg<schar, 64> cv::v_int8x64 |
#include <opencv2/core/hal/intrin_cpp.hpp>
六十四个8位有符号整数。
typedef v_uint16x32 simd512::v_uint16 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:16位无符号整数。
typedef v_reg<ushort, 16> cv::v_uint16x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
十六个16位无符号整数。
typedef v_reg<ushort, 32> cv::v_uint16x32 |
#include <opencv2/core/hal/intrin_cpp.hpp>
三十二个16位无符号整数。
typedef v_reg<ushort, 8> cv::v_uint16x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
八个16位无符号整数。
typedef v_uint32x16 simd512::v_uint32 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:32位无符号整数。
typedef v_reg<unsigned, 16> cv::v_uint32x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
十六个32位无符号整数。
typedef v_reg<unsigned, 4> cv::v_uint32x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
四个32位无符号整数。
typedef v_reg<unsigned, 8> cv::v_uint32x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
八个32位无符号整数。
typedef v_uint64x8 simd512::v_uint64 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量:64位无符号整数。
typedef v_reg<uint64, 2> cv::v_uint64x2 |
#include <opencv2/core/hal/intrin_cpp.hpp>
两个64位无符号整数。
typedef v_reg<uint64, 4> cv::v_uint64x4 |
#include <opencv2/core/hal/intrin_cpp.hpp>
四个64位无符号整数。
typedef v_reg<uint64, 8> cv::v_uint64x8 |
#include <opencv2/core/hal/intrin_cpp.hpp>
八个64位无符号整数。
typedef v_uint8x64 simd512::v_uint8 |
#include <opencv2/core/hal/intrin.hpp>
最大可用向量寄存器容量的8位无符号整数。
typedef v_reg<uchar, 16> cv::v_uint8x16 |
#include <opencv2/core/hal/intrin_cpp.hpp>
十六个8位无符号整数。
typedef v_reg<uchar, 32> cv::v_uint8x32 |
#include <opencv2/core/hal/intrin_cpp.hpp>
三十二个8位无符号整数。
typedef v_reg<uchar, 64> cv::v_uint8x64 |
#include <opencv2/core/hal/intrin_cpp.hpp>
六十四个8位无符号整数。
匿名枚举 |
#include <opencv2/core/hal/intrin_cpp.hpp>
枚举值 | |
---|---|
simd128_width | |
simd256_width | |
simd512_width | |
simdmax_width |
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
从内存加载256位长度的寄存器内容。
ptr | 指向包含数据的内存块的指针 |
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
从内存加载寄存器内容(已对齐)
类似于 cv::v256_load,但源内存块应已对齐(对于 SIMD256 为 32 字节边界,SIMD512 为 64 字节边界,等等)。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
使用双倍扩展从内存加载寄存器内容。
与 cv::v256_load 相同,但结果包类型将是内存类型的两倍宽。
short buf[8] = {1, 2, 3, 4, 5, 6, 7, 8}; // 类型为 int16
v_int32x8 r = v256_load_expand(buf); // r = {1, 2, 3, 4, 5, 6, 7, 8} - 类型为 int32
适用于 8 位、16 位、32 位整数源类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
使用四倍扩展从内存加载寄存器内容。
与 cv::v256_load_expand 相同,但结果类型是源类型的四倍宽。
char buf[8] = {1, 2, 3, 4, 5, 6, 7, 8}; // 类型为 int8
v_int32x8 r = v256_load_expand_q(buf); // r = {1, 2, 3, 4, 5, 6, 7, 8} - 类型为 int32
适用于 8 位整数源类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
从两个内存块加载寄存器内容。
loptr | 包含前半部分数据(0..n/2)的内存块 |
hiptr | 包含后半部分数据(n/2..n)的内存块 |
int lo[4] = { 1, 2, 3, 4 }, hi[4] = { 5, 6, 7, 8 };
v_int32x8 r = v256_load_halves(lo, hi);
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
将128位数据加载到低位部分(高位部分未定义)。
ptr | 包含前半部分数据(0..n/2)的内存块 |
int lo[4] = { 1, 2, 3, 4 };
v_int32x8 r = v256_load_low(lo);
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
从内存加载512位长度的寄存器内容。
ptr | 指向包含数据的内存块的指针 |
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
从内存加载寄存器内容(已对齐)
类似于 cv::v512_load,但源内存块应对齐(对于 SIMD512 等,应对齐到 64 字节边界)。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
使用双倍扩展从内存加载寄存器内容。
与 cv::v512_load 相同,但结果包类型将比内存类型宽 2 倍。
适用于 8 位、16 位、32 位整数源类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
使用四倍扩展从内存加载寄存器内容。
与 cv::v512_load_expand 相同,但结果类型是源类型的 4 倍。
适用于 8 位整数源类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
从两个内存块加载寄存器内容。
loptr | 包含前半部分数据(0..n/2)的内存块 |
hiptr | 包含后半部分数据(n/2..n)的内存块 |
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
将256位数据加载到低位部分(高位部分未定义)。
ptr | 包含前半部分数据(0..n/2)的内存块 |
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
绝对差值。
返回 \( |a - b| \) 并转换为对应的无符号类型。示例
适用于 8 位、16 位、32 位整数源类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
饱和绝对差值。
返回 \( saturate(|a - b|) \) 。对于 8 位和 16 位有符号整数源类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
广播向量的第 i 个元素。
方案
限制:0 <= i < nlanes 支持类型:32 位整数和浮点数 (s32/u32/f32)
#include <opencv2/core/hal/intrin_cpp.hpp>
向上取整元素。
对每个值向上取整。输入类型为浮点向量 ==> 输出类型为整数向量。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
从两个向量的最后一个元素组合向量。
方案
适用于除 64 位以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
从两个向量的第一个元素组合向量。
方案
适用于除 64 位以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
元素的点积。
将两个寄存器中的值相乘并对相邻的结果对求和。
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
元素的点积。
与cv::v_dotprod相同,但将第三个元素添加到相邻对的和中。方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
元素的点积并扩展。
将两个寄存器中的值相乘并扩展相邻结果对的和。
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
元素的点积。
与cv::v_dotprod_expand相同,但将第三个元素添加到相邻对的和中。方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
快速计算元素的点积并扩展。
将两个寄存器中的值相乘并扩展相邻结果对的和。
与cv::v_dotprod_expand相同,但在某些平台上可能会对结果对进行无序求和,如果只需要所有通道的总和,并且在受影响的平台上应该能获得更好的性能,则可以使用此内在函数。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
快速计算元素的点积。
与cv::v_dotprod_expand_fast相同,但将第三个元素添加到相邻对的和中。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
快速计算元素的点积。
与cv::v_dotprod相同,但在某些平台上可能会对结果对进行无序求和,如果只需要所有通道的总和,并且在受影响的平台上应该能获得更好的性能,则可以使用此内在函数。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
快速计算元素的点积。
与cv::v_dotprod_fast相同,但将第三个元素添加到相邻对的和中。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
相等比较。
#include <opencv2/core/hal/intrin_cpp.hpp>
元素的指数 \( e^x \)。
仅适用于浮点类型。核心实现步骤
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
将值扩展到更宽的打包类型。
将寄存器的内容复制到两个具有两倍宽度打包类型的寄存器中。方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
将较高的值扩展到更宽的打包类型。
与cv::v_expand_low相同,但扩展向量的较高一半。
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
将较低的值扩展到更宽的打包类型。
与cv::v_expand相同,但返回向量的较低一半。
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
向量提取。
方案
限制:0 <= shift < nlanes
用法
适用于所有类型。
#include <opencv2/core/hal/intrin_cpp.hpp>
向量提取。
方案:返回v的第s个元素。限制:0 <= s < nlanes
用法
适用于所有类型。
#include <opencv2/core/hal/intrin_cpp.hpp>
向下取整元素。
对每个值取下限。输入类型为浮点向量=>输出类型为整型向量。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
从内存加载寄存器内容。
ptr | 指向包含数据的内存块的指针 |
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
从内存加载寄存器内容(已对齐)
类似于cv::v_load,但源内存块应对齐(对于SIMD128为16字节边界,SIMD256为32字节边界等)
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
加载并解交错 (2 个通道)
从内存加载数据进行反交错并存储到2个寄存器中。方案
适用于除 64 位以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
加载并解交错 (3 个通道)
从内存加载数据进行反交错并存储到3个寄存器中。方案
适用于除 64 位以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
加载并解交错 (4 个通道)
从内存加载数据进行反交错并存储到4个寄存器中。方案
适用于除 64 位以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
使用双倍扩展从内存加载寄存器内容。
与cv::v_load相同,但结果打包类型将是内存类型的两倍宽度。
适用于 8 位、16 位、32 位整数源类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
使用四倍扩展从内存加载寄存器内容。
与cv::v_load_expand相同,但结果类型是源类型的四倍。
适用于 8 位整数源类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
从两个内存块加载寄存器内容。
loptr | 包含前半部分数据(0..n/2)的内存块 |
hiptr | 包含后半部分数据(n/2..n)的内存块 |
#include <opencv2/core/hal/intrin_cpp.hpp>
加载64位数据到低位部分(高位部分未定义)。
ptr | 包含前半部分数据(0..n/2)的内存块 |
#include <opencv2/core/hal/intrin_cpp.hpp>
元素的自然对数 \( \log(x) \)。
仅适用于浮点类型。核心实现步骤
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
矩阵乘法。
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
矩阵乘法和加法。
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
为每一对选择最大值。
方案
对于除64位整数以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
为每一对选择最小值。
方案
对于除64位整数以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
乘法和扩展。
将两个寄存器的值相乘,并将结果存储到具有更宽打包类型的两个寄存器中。方案
示例
仅针对16位和无符号32位源类型实现 (v_int16x8, v_uint16x8, v_uint32x4)。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
乘法并提取高位部分。
将两个寄存器的值相乘并存储结果的高位部分。仅针对16位源类型实现 (v_int16x8, v_uint16x8)。返回 \( a*b >> 16 \)
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
不相等比较。
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅仅在于它接受的参数。对于64位布尔值
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
这是一个重载的成员函数,为了方便提供。它与上面的函数的区别仅仅在于它接受的参数。对于32位布尔值
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
!对于16位布尔值
方案
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
统计向量通道中的1比特数,并以对应的无符号类型返回结果。
方案
适用于所有整数类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
将两个向量组合成另外两个向量的低位和高位部分。
#include <opencv2/core/hal/intrin_cpp.hpp>
查找一个最大值。
方案
除64位整数和64位浮点数类型外,适用于所有类型。
#include <opencv2/core/hal/intrin_cpp.hpp>
查找一个最小值。
方案
除64位整数和64位浮点数类型外,适用于所有类型。
|
内联 |
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
计算每个输入向量的所有元素之和,返回和的向量。
方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
向量反转顺序。
反转向量顺序
适用于所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
对元素进行四舍五入。
对每个值进行四舍五入。输入类型为浮点向量 ==> 输出类型为整型向量。
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
template<int shift, int n>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
获取第一个负数通道索引。
返回值是第一个负数通道的索引(对于全正数输入未定义)示例
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
按元素选择(混合操作)
返回值将通过使用以下方案组合值a和b来构建:result[i] = mask[i] ? a[i] : b[i];
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
#include <opencv2/core/hal/intrin_cpp.hpp>
获取负值掩码。
返回值是一个位掩码,其中对应于负打包值索引的位设置为 1。示例
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
同时计算元素的正弦值 \( sin(x) \) 和余弦值 \( cos(x) \)。
仅适用于浮点类型。核心实现步骤
#include <opencv2/core/hal/intrin_cpp.hpp>
将数据存储到内存中。
将寄存器内容存储到内存中。方案
指针可以是不对齐的。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
将数据存储到内存中(已对齐)
将寄存器内容存储到内存中。方案
指针**应该**以16字节边界对齐。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
将数据存储到内存(高半部分)
将寄存器内容的高半部分存储到内存中。方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
交叉存储 (4通道)
将4个寄存器中的数据交叉存储到内存中。方案
适用于除 64 位以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
交叉存储 (3通道)
将3个寄存器中的数据交叉存储到内存中。方案
适用于除 64 位以外的所有类型。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
交叉存储 (2通道)
将2个寄存器中的数据交叉存储到内存中。方案
适用于除 64 位以外的所有类型。
#include <opencv2/core/hal/intrin_cpp.hpp>
将数据存储到内存(低半部分)
将寄存器内容的低半部分存储到内存中。方案
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
转置 4x4 矩阵。
方案
#include <opencv2/core/hal/intrin_cpp.hpp>
这是一个重载的成员函数,为了方便提供。它与上面的函数的区别只在于它接受的参数。
|
内联 |
#include <opencv2/core/hal/intrin_cpp.hpp>
交叉两个向量。
方案
适用于除 64 位以外的所有类型。
|
static |
#include <opencv2/core/hal/intrin_cpp.hpp>