Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
35b21399
O
Opencv
项目概览
Greenplum
/
Opencv
11 个月 前同步成功
通知
7
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
Opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
35b21399
编写于
3月 26, 2015
作者:
M
Maksim Shabunin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Basic HAL module
上级
44f112a9
变更
19
隐藏空白更改
内联
并排
Showing
19 changed file
with
641 addition
and
415 deletion
+641
-415
apps/annotation/CMakeLists.txt
apps/annotation/CMakeLists.txt
+1
-1
apps/createsamples/CMakeLists.txt
apps/createsamples/CMakeLists.txt
+1
-1
apps/traincascade/CMakeLists.txt
apps/traincascade/CMakeLists.txt
+1
-1
cmake/OpenCVModule.cmake
cmake/OpenCVModule.cmake
+17
-0
modules/core/include/opencv2/core/base.hpp
modules/core/include/opencv2/core/base.hpp
+17
-2
modules/core/include/opencv2/core/cvdef.h
modules/core/include/opencv2/core/cvdef.h
+1
-232
modules/core/src/precomp.hpp
modules/core/src/precomp.hpp
+2
-0
modules/core/src/stat.cpp
modules/core/src/stat.cpp
+40
-142
modules/features2d/include/opencv2/features2d.hpp
modules/features2d/include/opencv2/features2d.hpp
+0
-32
modules/hal/CMakeLists.txt
modules/hal/CMakeLists.txt
+12
-0
modules/hal/include/opencv2/hal.hpp
modules/hal/include/opencv2/hal.hpp
+74
-0
modules/hal/include/opencv2/hal/defs.h
modules/hal/include/opencv2/hal/defs.h
+284
-0
modules/hal/src/norm.cpp
modules/hal/src/norm.cpp
+184
-0
modules/hal/src/precomp.hpp
modules/hal/src/precomp.hpp
+2
-0
modules/java/CMakeLists.txt
modules/java/CMakeLists.txt
+1
-0
samples/cpp/CMakeLists.txt
samples/cpp/CMakeLists.txt
+1
-1
samples/directx/CMakeLists.txt
samples/directx/CMakeLists.txt
+1
-1
samples/gpu/CMakeLists.txt
samples/gpu/CMakeLists.txt
+1
-1
samples/tapi/CMakeLists.txt
samples/tapi/CMakeLists.txt
+1
-1
未找到文件。
apps/annotation/CMakeLists.txt
浏览文件 @
35b21399
...
...
@@ -9,7 +9,7 @@ project(annotation)
set
(
the_target opencv_annotation
)
ocv_target_include_directories
(
${
the_target
}
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
"
${
OpenCV_SOURCE_DIR
}
/include/opencv"
)
ocv_target_include_modules
(
${
the_target
}
${
OPENCV_ANNOTATION_DEPS
}
)
ocv_target_include_modules
_recurse
(
${
the_target
}
${
OPENCV_ANNOTATION_DEPS
}
)
file
(
GLOB SRCS *.cpp
)
...
...
apps/createsamples/CMakeLists.txt
浏览文件 @
35b21399
...
...
@@ -9,7 +9,7 @@ project(createsamples)
set
(
the_target opencv_createsamples
)
ocv_target_include_directories
(
${
the_target
}
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
"
${
OpenCV_SOURCE_DIR
}
/include/opencv"
)
ocv_target_include_modules
(
${
the_target
}
${
OPENCV_CREATESAMPLES_DEPS
}
)
ocv_target_include_modules
_recurse
(
${
the_target
}
${
OPENCV_CREATESAMPLES_DEPS
}
)
file
(
GLOB SRCS *.cpp
)
file
(
GLOB HDRS *.h*
)
...
...
apps/traincascade/CMakeLists.txt
浏览文件 @
35b21399
...
...
@@ -9,7 +9,7 @@ project(traincascade)
set
(
the_target opencv_traincascade
)
ocv_target_include_directories
(
${
the_target
}
PRIVATE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
"
"
${
OpenCV_SOURCE_DIR
}
/include/opencv"
)
ocv_target_include_modules
(
${
the_target
}
${
OPENCV_TRAINCASCADE_DEPS
}
)
ocv_target_include_modules
_recurse
(
${
the_target
}
${
OPENCV_TRAINCASCADE_DEPS
}
)
file
(
GLOB SRCS *.cpp
)
file
(
GLOB HDRS *.h*
)
...
...
cmake/OpenCVModule.cmake
浏览文件 @
35b21399
...
...
@@ -176,6 +176,11 @@ macro(ocv_add_module _name)
endif
()
endif
()
# add HAL as dependency
if
(
NOT
"
${
the_module
}
"
STREQUAL
"opencv_hal"
)
ocv_add_dependencies
(
${
the_module
}
opencv_hal
)
endif
()
# add self to the world dependencies
if
((
NOT DEFINED OPENCV_MODULE_IS_PART_OF_WORLD
AND NOT OPENCV_MODULE_
${
the_module
}
_CLASS STREQUAL
"BINDINGS"
...
...
@@ -517,6 +522,18 @@ macro(ocv_include_modules)
endforeach
()
endmacro
()
# same as previous but with dependencies
macro
(
ocv_include_modules_recurse
)
ocv_include_modules
(
${
ARGN
}
)
foreach
(
d
${
ARGN
}
)
if
(
d MATCHES
"^opencv_"
AND HAVE_
${
d
}
AND DEFINED OPENCV_MODULE_
${
d
}
_DEPS
)
foreach
(
sub
${
OPENCV_MODULE_
${
d
}
_DEPS
}
)
ocv_include_modules
(
${
sub
}
)
endforeach
()
endif
()
endforeach
()
endmacro
()
# setup include paths for the list of passed modules
macro
(
ocv_target_include_modules target
)
foreach
(
d
${
ARGN
}
)
...
...
modules/core/include/opencv2/core/base.hpp
浏览文件 @
35b21399
...
...
@@ -503,8 +503,6 @@ CV_EXPORTS bool Cholesky(float* A, size_t astep, int m, float* b, size_t bstep,
CV_EXPORTS
bool
Cholesky
(
double
*
A
,
size_t
astep
,
int
m
,
double
*
b
,
size_t
bstep
,
int
n
);
CV_EXPORTS
int
normL1_
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
);
CV_EXPORTS
int
normHamming
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
);
CV_EXPORTS
int
normHamming
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
,
int
cellSize
);
CV_EXPORTS
float
normL1_
(
const
float
*
a
,
const
float
*
b
,
int
n
);
CV_EXPORTS
float
normL2Sqr_
(
const
float
*
a
,
const
float
*
b
,
int
n
);
...
...
@@ -532,6 +530,23 @@ in degrees and varies from 0 to 360 degrees. The accuracy is about 0.3 degrees.
*/
CV_EXPORTS_W
float
fastAtan2
(
float
y
,
float
x
);
/*
* Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor
* bit count of A exclusive XOR'ed with B
*/
struct
CV_EXPORTS
Hamming
{
enum
{
normType
=
NORM_HAMMING
};
typedef
unsigned
char
ValueType
;
typedef
int
ResultType
;
/** this will count the bits in a ^ b
*/
ResultType
operator
()(
const
unsigned
char
*
a
,
const
unsigned
char
*
b
,
int
size
)
const
;
};
typedef
Hamming
HammingLUT
;
/////////////////////////////////// inline norms ////////////////////////////////////
...
...
modules/core/include/opencv2/core/cvdef.h
浏览文件 @
35b21399
...
...
@@ -56,23 +56,7 @@
#undef abs
#undef Complex
#if defined __ICL
# define CV_ICC __ICL
#elif defined __ICC
# define CV_ICC __ICC
#elif defined __ECL
# define CV_ICC __ECL
#elif defined __ECC
# define CV_ICC __ECC
#elif defined __INTEL_COMPILER
# define CV_ICC __INTEL_COMPILER
#endif
#if defined CV_ICC && !defined CV_ENABLE_UNROLLED
# define CV_ENABLE_UNROLLED 0
#else
# define CV_ENABLE_UNROLLED 1
#endif
#include "opencv2/hal/defs.h"
#ifdef __OPENCV_BUILD
# define DISABLE_OPENCV_24_COMPATIBILITY
...
...
@@ -104,216 +88,6 @@
# endif
#endif
/* CPU features and intrinsics support */
#define CV_CPU_NONE 0
#define CV_CPU_MMX 1
#define CV_CPU_SSE 2
#define CV_CPU_SSE2 3
#define CV_CPU_SSE3 4
#define CV_CPU_SSSE3 5
#define CV_CPU_SSE4_1 6
#define CV_CPU_SSE4_2 7
#define CV_CPU_POPCNT 8
#define CV_CPU_AVX 10
#define CV_CPU_AVX2 11
#define CV_CPU_FMA3 12
#define CV_CPU_AVX_512F 13
#define CV_CPU_AVX_512BW 14
#define CV_CPU_AVX_512CD 15
#define CV_CPU_AVX_512DQ 16
#define CV_CPU_AVX_512ER 17
#define CV_CPU_AVX_512IFMA512 18
#define CV_CPU_AVX_512PF 19
#define CV_CPU_AVX_512VBMI 20
#define CV_CPU_AVX_512VL 21
#define CV_CPU_NEON 100
// when adding to this list remember to update the enum in core/utility.cpp
#define CV_HARDWARE_MAX_FEATURE 255
// do not include SSE/AVX/NEON headers for NVCC compiler
#ifndef __CUDACC__
#if defined __SSE2__ || defined _M_X64 || (defined _M_IX86_FP && _M_IX86_FP >= 2)
# include <emmintrin.h>
# define CV_MMX 1
# define CV_SSE 1
# define CV_SSE2 1
# if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500)
# include <pmmintrin.h>
# define CV_SSE3 1
# endif
# if defined __SSSE3__ || (defined _MSC_VER && _MSC_VER >= 1500)
# include <tmmintrin.h>
# define CV_SSSE3 1
# endif
# if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500)
# include <smmintrin.h>
# define CV_SSE4_1 1
# endif
# if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500)
# include <nmmintrin.h>
# define CV_SSE4_2 1
# endif
# if defined __POPCNT__ || (defined _MSC_VER && _MSC_VER >= 1500)
# ifdef _MSC_VER
# include <nmmintrin.h>
# else
# include <popcntintrin.h>
# endif
# define CV_POPCNT 1
# endif
# if defined __AVX__ || (defined _MSC_VER && _MSC_VER >= 1600 && 0)
// MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX
// See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32
# include <immintrin.h>
# define CV_AVX 1
# if defined(_XCR_XFEATURE_ENABLED_MASK)
# define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK)
# else
# define __xgetbv() 0
# endif
# endif
# if defined __AVX2__ || (defined _MSC_VER && _MSC_VER >= 1800 && 0)
# include <immintrin.h>
# define CV_AVX2 1
# if defined __FMA__
# define CV_FMA3 1
# endif
# endif
#endif
#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)
# include <Intrin.h>
# include "arm_neon.h"
# define CV_NEON 1
# define CPU_HAS_NEON_FEATURE (true)
#elif defined(__ARM_NEON__) || (defined (__ARM_NEON) && defined(__aarch64__))
# include <arm_neon.h>
# define CV_NEON 1
#endif
#if defined __GNUC__ && defined __arm__ && (defined __ARM_PCS_VFP || defined __ARM_VFPV3__)
# define CV_VFP 1
#endif
#endif // __CUDACC__
#ifndef CV_POPCNT
#define CV_POPCNT 0
#endif
#ifndef CV_MMX
# define CV_MMX 0
#endif
#ifndef CV_SSE
# define CV_SSE 0
#endif
#ifndef CV_SSE2
# define CV_SSE2 0
#endif
#ifndef CV_SSE3
# define CV_SSE3 0
#endif
#ifndef CV_SSSE3
# define CV_SSSE3 0
#endif
#ifndef CV_SSE4_1
# define CV_SSE4_1 0
#endif
#ifndef CV_SSE4_2
# define CV_SSE4_2 0
#endif
#ifndef CV_AVX
# define CV_AVX 0
#endif
#ifndef CV_AVX2
# define CV_AVX2 0
#endif
#ifndef CV_FMA3
# define CV_FMA3 0
#endif
#ifndef CV_AVX_512F
# define CV_AVX_512F 0
#endif
#ifndef CV_AVX_512BW
# define CV_AVX_512BW 0
#endif
#ifndef CV_AVX_512CD
# define CV_AVX_512CD 0
#endif
#ifndef CV_AVX_512DQ
# define CV_AVX_512DQ 0
#endif
#ifndef CV_AVX_512ER
# define CV_AVX_512ER 0
#endif
#ifndef CV_AVX_512IFMA512
# define CV_AVX_512IFMA512 0
#endif
#ifndef CV_AVX_512PF
# define CV_AVX_512PF 0
#endif
#ifndef CV_AVX_512VBMI
# define CV_AVX_512VBMI 0
#endif
#ifndef CV_AVX_512VL
# define CV_AVX_512VL 0
#endif
#ifndef CV_NEON
# define CV_NEON 0
#endif
#ifndef CV_VFP
# define CV_VFP 0
#endif
/* primitive types */
/*
schar - signed 1 byte integer
uchar - unsigned 1 byte integer
short - signed 2 byte integer
ushort - unsigned 2 byte integer
int - signed 4 byte integer
uint - unsigned 4 byte integer
int64 - signed 8 byte integer
uint64 - unsigned 8 byte integer
*/
#if !defined _MSC_VER && !defined __BORLANDC__
# if defined __cplusplus && __cplusplus >= 201103L
# include <cstdint>
typedef
std
::
uint32_t
uint
;
# else
# include <stdint.h>
typedef
uint32_t
uint
;
# endif
#else
typedef
unsigned
uint
;
#endif
typedef
signed
char
schar
;
#ifndef __IPL_H__
typedef
unsigned
char
uchar
;
typedef
unsigned
short
ushort
;
#endif
#if defined _MSC_VER || defined __BORLANDC__
typedef
__int64
int64
;
typedef
unsigned
__int64
uint64
;
# define CV_BIG_INT(n) n##I64
# define CV_BIG_UINT(n) n##UI64
#else
typedef
int64_t
int64
;
typedef
uint64_t
uint64
;
# define CV_BIG_INT(n) n##LL
# define CV_BIG_UINT(n) n##ULL
#endif
/* special informative macros for wrapper generators */
#define CV_EXPORTS_W CV_EXPORTS
#define CV_EXPORTS_W_SIMPLE CV_EXPORTS
...
...
@@ -326,11 +100,6 @@ typedef signed char schar;
#define CV_WRAP
#define CV_WRAP_AS(synonym)
/* fundamental constants */
#define CV_PI 3.1415926535897932384626433832795
#define CV_2PI 6.283185307179586476925286766559
#define CV_LOG2 0.69314718055994530941723212145818
/****************************************************************************************\
* Matrix type (Mat) *
\****************************************************************************************/
...
...
modules/core/src/precomp.hpp
浏览文件 @
35b21399
...
...
@@ -55,6 +55,8 @@
#include "opencv2/core/private.cuda.hpp"
#include "opencv2/core/ocl.hpp"
#include "opencv2/hal.hpp"
#include <assert.h>
#include <ctype.h>
#include <float.h>
...
...
modules/core/src/stat.cpp
浏览文件 @
35b21399
...
...
@@ -2550,140 +2550,6 @@ int normL1_(const uchar* a, const uchar* b, int n)
return
d
;
}
static
const
uchar
popCountTable
[]
=
{
0
,
1
,
1
,
2
,
1
,
2
,
2
,
3
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
5
,
6
,
6
,
7
,
6
,
7
,
7
,
8
};
static
const
uchar
popCountTable2
[]
=
{
0
,
1
,
1
,
1
,
1
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
};
static
const
uchar
popCountTable4
[]
=
{
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
};
static
int
normHamming
(
const
uchar
*
a
,
int
n
)
{
int
i
=
0
,
result
=
0
;
#if CV_NEON
{
uint32x4_t
bits
=
vmovq_n_u32
(
0
);
for
(;
i
<=
n
-
16
;
i
+=
16
)
{
uint8x16_t
A_vec
=
vld1q_u8
(
a
+
i
);
uint8x16_t
bitsSet
=
vcntq_u8
(
A_vec
);
uint16x8_t
bitSet8
=
vpaddlq_u8
(
bitsSet
);
uint32x4_t
bitSet4
=
vpaddlq_u16
(
bitSet8
);
bits
=
vaddq_u32
(
bits
,
bitSet4
);
}
uint64x2_t
bitSet2
=
vpaddlq_u32
(
bits
);
result
=
vgetq_lane_s32
(
vreinterpretq_s32_u64
(
bitSet2
),
0
);
result
+=
vgetq_lane_s32
(
vreinterpretq_s32_u64
(
bitSet2
),
2
);
}
#endif
for
(
;
i
<=
n
-
4
;
i
+=
4
)
result
+=
popCountTable
[
a
[
i
]]
+
popCountTable
[
a
[
i
+
1
]]
+
popCountTable
[
a
[
i
+
2
]]
+
popCountTable
[
a
[
i
+
3
]];
for
(
;
i
<
n
;
i
++
)
result
+=
popCountTable
[
a
[
i
]];
return
result
;
}
int
normHamming
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
)
{
int
i
=
0
,
result
=
0
;
#if CV_NEON
{
uint32x4_t
bits
=
vmovq_n_u32
(
0
);
for
(;
i
<=
n
-
16
;
i
+=
16
)
{
uint8x16_t
A_vec
=
vld1q_u8
(
a
+
i
);
uint8x16_t
B_vec
=
vld1q_u8
(
b
+
i
);
uint8x16_t
AxorB
=
veorq_u8
(
A_vec
,
B_vec
);
uint8x16_t
bitsSet
=
vcntq_u8
(
AxorB
);
uint16x8_t
bitSet8
=
vpaddlq_u8
(
bitsSet
);
uint32x4_t
bitSet4
=
vpaddlq_u16
(
bitSet8
);
bits
=
vaddq_u32
(
bits
,
bitSet4
);
}
uint64x2_t
bitSet2
=
vpaddlq_u32
(
bits
);
result
=
vgetq_lane_s32
(
vreinterpretq_s32_u64
(
bitSet2
),
0
);
result
+=
vgetq_lane_s32
(
vreinterpretq_s32_u64
(
bitSet2
),
2
);
}
#endif
for
(
;
i
<=
n
-
4
;
i
+=
4
)
result
+=
popCountTable
[
a
[
i
]
^
b
[
i
]]
+
popCountTable
[
a
[
i
+
1
]
^
b
[
i
+
1
]]
+
popCountTable
[
a
[
i
+
2
]
^
b
[
i
+
2
]]
+
popCountTable
[
a
[
i
+
3
]
^
b
[
i
+
3
]];
for
(
;
i
<
n
;
i
++
)
result
+=
popCountTable
[
a
[
i
]
^
b
[
i
]];
return
result
;
}
static
int
normHamming
(
const
uchar
*
a
,
int
n
,
int
cellSize
)
{
if
(
cellSize
==
1
)
return
normHamming
(
a
,
n
);
const
uchar
*
tab
=
0
;
if
(
cellSize
==
2
)
tab
=
popCountTable2
;
else
if
(
cellSize
==
4
)
tab
=
popCountTable4
;
else
CV_Error
(
CV_StsBadSize
,
"bad cell size (not 1, 2 or 4) in normHamming"
);
int
i
=
0
,
result
=
0
;
#if CV_ENABLE_UNROLLED
for
(
;
i
<=
n
-
4
;
i
+=
4
)
result
+=
tab
[
a
[
i
]]
+
tab
[
a
[
i
+
1
]]
+
tab
[
a
[
i
+
2
]]
+
tab
[
a
[
i
+
3
]];
#endif
for
(
;
i
<
n
;
i
++
)
result
+=
tab
[
a
[
i
]];
return
result
;
}
int
normHamming
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
,
int
cellSize
)
{
if
(
cellSize
==
1
)
return
normHamming
(
a
,
b
,
n
);
const
uchar
*
tab
=
0
;
if
(
cellSize
==
2
)
tab
=
popCountTable2
;
else
if
(
cellSize
==
4
)
tab
=
popCountTable4
;
else
CV_Error
(
CV_StsBadSize
,
"bad cell size (not 1, 2 or 4) in normHamming"
);
int
i
=
0
,
result
=
0
;
#if CV_ENABLE_UNROLLED
for
(
;
i
<=
n
-
4
;
i
+=
4
)
result
+=
tab
[
a
[
i
]
^
b
[
i
]]
+
tab
[
a
[
i
+
1
]
^
b
[
i
+
1
]]
+
tab
[
a
[
i
+
2
]
^
b
[
i
+
2
]]
+
tab
[
a
[
i
+
3
]
^
b
[
i
+
3
]];
#endif
for
(
;
i
<
n
;
i
++
)
result
+=
tab
[
a
[
i
]
^
b
[
i
]];
return
result
;
}
template
<
typename
T
,
typename
ST
>
int
normInf_
(
const
T
*
src
,
const
uchar
*
mask
,
ST
*
_result
,
int
len
,
int
cn
)
{
...
...
@@ -2816,6 +2682,12 @@ normDiffL2_(const T* src1, const T* src2, const uchar* mask, ST* _result, int le
return
0
;
}
Hamming
::
ResultType
Hamming
::
operator
()(
const
unsigned
char
*
a
,
const
unsigned
char
*
b
,
int
size
)
const
{
int
result
=
0
;
cv
::
hal
::
normHamming
(
a
,
b
,
size
,
result
);
return
result
;
}
#define CV_DEF_NORM_FUNC(L, suffix, type, ntype) \
static int norm##L##_##suffix(const type* src, const uchar* mask, ntype* r, int len, int cn) \
...
...
@@ -3164,10 +3036,18 @@ double cv::norm( InputArray _src, int normType, InputArray _mask )
const
uchar
*
data
=
src
.
ptr
<
uchar
>
();
if
(
normType
==
NORM_HAMMING
)
return
normHamming
(
data
,
(
int
)
len
);
{
int
result
=
0
;
cv
::
hal
::
normHamming
(
data
,
(
int
)
len
,
result
);
return
result
;
}
if
(
normType
==
NORM_HAMMING2
)
return
normHamming
(
data
,
(
int
)
len
,
2
);
{
int
result
=
0
;
hal
::
normHamming
(
data
,
(
int
)
len
,
2
,
result
);
return
result
;
}
}
}
}
...
...
@@ -3191,7 +3071,11 @@ double cv::norm( InputArray _src, int normType, InputArray _mask )
int
result
=
0
;
for
(
size_t
i
=
0
;
i
<
it
.
nplanes
;
i
++
,
++
it
)
result
+=
normHamming
(
ptrs
[
0
],
total
,
cellSize
);
{
int
one
=
0
;
cv
::
hal
::
normHamming
(
ptrs
[
0
],
total
,
cellSize
,
one
);
result
+=
one
;
}
return
result
;
}
...
...
@@ -3673,7 +3557,11 @@ double cv::norm( InputArray _src1, InputArray _src2, int normType, InputArray _m
int
result
=
0
;
for
(
size_t
i
=
0
;
i
<
it
.
nplanes
;
i
++
,
++
it
)
result
+=
normHamming
(
ptrs
[
0
],
ptrs
[
1
],
total
,
cellSize
);
{
int
one
=
0
;
hal
::
normHamming
(
ptrs
[
0
],
ptrs
[
1
],
total
,
cellSize
,
one
);
result
+=
one
;
}
return
result
;
}
...
...
@@ -3810,13 +3698,18 @@ static void batchDistHamming(const uchar* src1, const uchar* src2, size_t step2,
if
(
!
mask
)
{
for
(
int
i
=
0
;
i
<
nvecs
;
i
++
)
dist
[
i
]
=
normHamming
(
src1
,
src2
+
step2
*
i
,
len
);
hal
::
normHamming
(
src1
,
src2
+
step2
*
i
,
len
,
dist
[
i
]
);
}
else
{
int
val0
=
INT_MAX
;
for
(
int
i
=
0
;
i
<
nvecs
;
i
++
)
dist
[
i
]
=
mask
[
i
]
?
normHamming
(
src1
,
src2
+
step2
*
i
,
len
)
:
val0
;
{
if
(
mask
[
i
])
hal
::
normHamming
(
src1
,
src2
+
step2
*
i
,
len
,
dist
[
i
]);
else
dist
[
i
]
=
val0
;
}
}
}
...
...
@@ -3827,13 +3720,18 @@ static void batchDistHamming2(const uchar* src1, const uchar* src2, size_t step2
if
(
!
mask
)
{
for
(
int
i
=
0
;
i
<
nvecs
;
i
++
)
dist
[
i
]
=
normHamming
(
src1
,
src2
+
step2
*
i
,
len
,
2
);
hal
::
normHamming
(
src1
,
src2
+
step2
*
i
,
len
,
2
,
dist
[
i
]
);
}
else
{
int
val0
=
INT_MAX
;
for
(
int
i
=
0
;
i
<
nvecs
;
i
++
)
dist
[
i
]
=
mask
[
i
]
?
normHamming
(
src1
,
src2
+
step2
*
i
,
len
,
2
)
:
val0
;
{
if
(
mask
[
i
])
hal
::
normHamming
(
src1
,
src2
+
step2
*
i
,
len
,
2
,
dist
[
i
]);
else
dist
[
i
]
=
val0
;
}
}
}
...
...
modules/features2d/include/opencv2/features2d.hpp
浏览文件 @
35b21399
...
...
@@ -679,38 +679,6 @@ struct CV_EXPORTS L1
}
};
/*
* Hamming distance functor - counts the bit differences between two strings - useful for the Brief descriptor
* bit count of A exclusive XOR'ed with B
*/
struct
CV_EXPORTS
Hamming
{
enum
{
normType
=
NORM_HAMMING
};
typedef
unsigned
char
ValueType
;
typedef
int
ResultType
;
/** this will count the bits in a ^ b
*/
ResultType
operator
()(
const
unsigned
char
*
a
,
const
unsigned
char
*
b
,
int
size
)
const
{
return
normHamming
(
a
,
b
,
size
);
}
};
typedef
Hamming
HammingLUT
;
template
<
int
cellsize
>
struct
HammingMultilevel
{
enum
{
normType
=
NORM_HAMMING
+
(
cellsize
>
1
)
};
typedef
unsigned
char
ValueType
;
typedef
int
ResultType
;
ResultType
operator
()(
const
unsigned
char
*
a
,
const
unsigned
char
*
b
,
int
size
)
const
{
return
normHamming
(
a
,
b
,
size
,
cellsize
);
}
};
/****************************************************************************************\
* DescriptorMatcher *
\****************************************************************************************/
...
...
modules/hal/CMakeLists.txt
0 → 100644
浏览文件 @
35b21399
set
(
the_description
"The Hardware Acceleration Layer (HAL) module"
)
set
(
OPENCV_MODULE_TYPE STATIC
)
# set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
if
(
UNIX
)
if
(
CMAKE_COMPILER_IS_GNUCXX OR CV_ICC
)
set
(
CMAKE_CXX_FLAGS
"
${
CMAKE_CXX_FLAGS
}
-fPIC"
)
endif
()
endif
()
ocv_define_module
(
hal
)
modules/hal/include/opencv2/hal.hpp
0 → 100644
浏览文件 @
35b21399
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
// Copyright (C) 2015, Itseez Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#ifndef __OPENCV_HAL_HPP__
#define __OPENCV_HAL_HPP__
#include "opencv2/hal/defs.h"
/**
@defgroup hal Hardware Acceleration Layer
*/
namespace
cv
{
namespace
hal
{
namespace
Error
{
enum
Code
{
Ok
=
0
,
Unknown
=
-
1
};
}
Error
::
Code
normHamming
(
const
uchar
*
a
,
int
n
,
int
&
result
);
Error
::
Code
normHamming
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
,
int
&
result
);
Error
::
Code
normHamming
(
const
uchar
*
a
,
int
n
,
int
cellSize
,
int
&
result
);
Error
::
Code
normHamming
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
,
int
cellSize
,
int
&
result
);
}}
//cv::hal
#endif //__OPENCV_HAL_HPP__
modules/hal/include/opencv2/hal/defs.h
0 → 100644
浏览文件 @
35b21399
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Copyright (C) 2013, OpenCV Foundation, all rights reserved.
// Copyright (C) 2015, Itseez Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#ifndef __OPENCV_DEF_H__
#define __OPENCV_DEF_H__
#if !defined _CRT_SECURE_NO_DEPRECATE && defined _MSC_VER && _MSC_VER > 1300
# define _CRT_SECURE_NO_DEPRECATE
/* to avoid multiple Visual Studio warnings */
#endif
#if defined __ICL
# define CV_ICC __ICL
#elif defined __ICC
# define CV_ICC __ICC
#elif defined __ECL
# define CV_ICC __ECL
#elif defined __ECC
# define CV_ICC __ECC
#elif defined __INTEL_COMPILER
# define CV_ICC __INTEL_COMPILER
#endif
#if defined CV_ICC && !defined CV_ENABLE_UNROLLED
# define CV_ENABLE_UNROLLED 0
#else
# define CV_ENABLE_UNROLLED 1
#endif
/* CPU features and intrinsics support */
#define CV_CPU_NONE 0
#define CV_CPU_MMX 1
#define CV_CPU_SSE 2
#define CV_CPU_SSE2 3
#define CV_CPU_SSE3 4
#define CV_CPU_SSSE3 5
#define CV_CPU_SSE4_1 6
#define CV_CPU_SSE4_2 7
#define CV_CPU_POPCNT 8
#define CV_CPU_AVX 10
#define CV_CPU_AVX2 11
#define CV_CPU_FMA3 12
#define CV_CPU_AVX_512F 13
#define CV_CPU_AVX_512BW 14
#define CV_CPU_AVX_512CD 15
#define CV_CPU_AVX_512DQ 16
#define CV_CPU_AVX_512ER 17
#define CV_CPU_AVX_512IFMA512 18
#define CV_CPU_AVX_512PF 19
#define CV_CPU_AVX_512VBMI 20
#define CV_CPU_AVX_512VL 21
#define CV_CPU_NEON 100
// when adding to this list remember to update the enum in core/utility.cpp
#define CV_HARDWARE_MAX_FEATURE 255
// do not include SSE/AVX/NEON headers for NVCC compiler
#ifndef __CUDACC__
#if defined __SSE2__ || defined _M_X64 || (defined _M_IX86_FP && _M_IX86_FP >= 2)
# include <emmintrin.h>
# define CV_MMX 1
# define CV_SSE 1
# define CV_SSE2 1
# if defined __SSE3__ || (defined _MSC_VER && _MSC_VER >= 1500)
# include <pmmintrin.h>
# define CV_SSE3 1
# endif
# if defined __SSSE3__ || (defined _MSC_VER && _MSC_VER >= 1500)
# include <tmmintrin.h>
# define CV_SSSE3 1
# endif
# if defined __SSE4_1__ || (defined _MSC_VER && _MSC_VER >= 1500)
# include <smmintrin.h>
# define CV_SSE4_1 1
# endif
# if defined __SSE4_2__ || (defined _MSC_VER && _MSC_VER >= 1500)
# include <nmmintrin.h>
# define CV_SSE4_2 1
# endif
# if defined __POPCNT__ || (defined _MSC_VER && _MSC_VER >= 1500)
# ifdef _MSC_VER
# include <nmmintrin.h>
# else
# include <popcntintrin.h>
# endif
# define CV_POPCNT 1
# endif
# if defined __AVX__ || (defined _MSC_VER && _MSC_VER >= 1600 && 0)
// MS Visual Studio 2010 (2012?) has no macro pre-defined to identify the use of /arch:AVX
// See: http://connect.microsoft.com/VisualStudio/feedback/details/605858/arch-avx-should-define-a-predefined-macro-in-x64-and-set-a-unique-value-for-m-ix86-fp-in-win32
# include <immintrin.h>
# define CV_AVX 1
# if defined(_XCR_XFEATURE_ENABLED_MASK)
# define __xgetbv() _xgetbv(_XCR_XFEATURE_ENABLED_MASK)
# else
# define __xgetbv() 0
# endif
# endif
# if defined __AVX2__ || (defined _MSC_VER && _MSC_VER >= 1800 && 0)
# include <immintrin.h>
# define CV_AVX2 1
# if defined __FMA__
# define CV_FMA3 1
# endif
# endif
#endif
#if (defined WIN32 || defined _WIN32) && defined(_M_ARM)
# include <Intrin.h>
# include "arm_neon.h"
# define CV_NEON 1
# define CPU_HAS_NEON_FEATURE (true)
#elif defined(__ARM_NEON__) || (defined (__ARM_NEON) && defined(__aarch64__))
# include <arm_neon.h>
# define CV_NEON 1
#endif
#if defined __GNUC__ && defined __arm__ && (defined __ARM_PCS_VFP || defined __ARM_VFPV3__)
# define CV_VFP 1
#endif
#endif // __CUDACC__
#ifndef CV_POPCNT
#define CV_POPCNT 0
#endif
#ifndef CV_MMX
# define CV_MMX 0
#endif
#ifndef CV_SSE
# define CV_SSE 0
#endif
#ifndef CV_SSE2
# define CV_SSE2 0
#endif
#ifndef CV_SSE3
# define CV_SSE3 0
#endif
#ifndef CV_SSSE3
# define CV_SSSE3 0
#endif
#ifndef CV_SSE4_1
# define CV_SSE4_1 0
#endif
#ifndef CV_SSE4_2
# define CV_SSE4_2 0
#endif
#ifndef CV_AVX
# define CV_AVX 0
#endif
#ifndef CV_AVX2
# define CV_AVX2 0
#endif
#ifndef CV_FMA3
# define CV_FMA3 0
#endif
#ifndef CV_AVX_512F
# define CV_AVX_512F 0
#endif
#ifndef CV_AVX_512BW
# define CV_AVX_512BW 0
#endif
#ifndef CV_AVX_512CD
# define CV_AVX_512CD 0
#endif
#ifndef CV_AVX_512DQ
# define CV_AVX_512DQ 0
#endif
#ifndef CV_AVX_512ER
# define CV_AVX_512ER 0
#endif
#ifndef CV_AVX_512IFMA512
# define CV_AVX_512IFMA512 0
#endif
#ifndef CV_AVX_512PF
# define CV_AVX_512PF 0
#endif
#ifndef CV_AVX_512VBMI
# define CV_AVX_512VBMI 0
#endif
#ifndef CV_AVX_512VL
# define CV_AVX_512VL 0
#endif
#ifndef CV_NEON
# define CV_NEON 0
#endif
#ifndef CV_VFP
# define CV_VFP 0
#endif
/* primitive types */
/*
schar - signed 1 byte integer
uchar - unsigned 1 byte integer
short - signed 2 byte integer
ushort - unsigned 2 byte integer
int - signed 4 byte integer
uint - unsigned 4 byte integer
int64 - signed 8 byte integer
uint64 - unsigned 8 byte integer
*/
#if !defined _MSC_VER && !defined __BORLANDC__
# if defined __cplusplus && __cplusplus >= 201103L
# include <cstdint>
typedef
std
::
uint32_t
uint
;
# else
# include <stdint.h>
typedef
uint32_t
uint
;
# endif
#else
typedef
unsigned
uint
;
#endif
typedef
signed
char
schar
;
#ifndef __IPL_H__
typedef
unsigned
char
uchar
;
typedef
unsigned
short
ushort
;
#endif
#if defined _MSC_VER || defined __BORLANDC__
typedef
__int64
int64
;
typedef
unsigned
__int64
uint64
;
# define CV_BIG_INT(n) n##I64
# define CV_BIG_UINT(n) n##UI64
#else
typedef
int64_t
int64
;
typedef
uint64_t
uint64
;
# define CV_BIG_INT(n) n##LL
# define CV_BIG_UINT(n) n##ULL
#endif
/* fundamental constants */
#define CV_PI 3.1415926535897932384626433832795
#define CV_2PI 6.283185307179586476925286766559
#define CV_LOG2 0.69314718055994530941723212145818
#endif //__OPENCV_HAL_H__
modules/hal/src/norm.cpp
0 → 100644
浏览文件 @
35b21399
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//M*/
#include "precomp.hpp"
namespace
cv
{
namespace
hal
{
static
const
uchar
popCountTable
[]
=
{
0
,
1
,
1
,
2
,
1
,
2
,
2
,
3
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
1
,
2
,
2
,
3
,
2
,
3
,
3
,
4
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
2
,
3
,
3
,
4
,
3
,
4
,
4
,
5
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
3
,
4
,
4
,
5
,
4
,
5
,
5
,
6
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
4
,
5
,
5
,
6
,
5
,
6
,
6
,
7
,
5
,
6
,
6
,
7
,
6
,
7
,
7
,
8
};
static
const
uchar
popCountTable2
[]
=
{
0
,
1
,
1
,
1
,
1
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
1
,
2
,
2
,
2
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
2
,
3
,
3
,
3
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
,
3
,
4
,
4
,
4
};
static
const
uchar
popCountTable4
[]
=
{
0
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
1
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
,
2
};
Error
::
Code
normHamming
(
const
uchar
*
a
,
int
n
,
int
&
result
)
{
int
i
=
0
;
result
=
0
;
#if CV_NEON
{
uint32x4_t
bits
=
vmovq_n_u32
(
0
);
for
(;
i
<=
n
-
16
;
i
+=
16
)
{
uint8x16_t
A_vec
=
vld1q_u8
(
a
+
i
);
uint8x16_t
bitsSet
=
vcntq_u8
(
A_vec
);
uint16x8_t
bitSet8
=
vpaddlq_u8
(
bitsSet
);
uint32x4_t
bitSet4
=
vpaddlq_u16
(
bitSet8
);
bits
=
vaddq_u32
(
bits
,
bitSet4
);
}
uint64x2_t
bitSet2
=
vpaddlq_u32
(
bits
);
result
=
vgetq_lane_s32
(
vreinterpretq_s32_u64
(
bitSet2
),
0
);
result
+=
vgetq_lane_s32
(
vreinterpretq_s32_u64
(
bitSet2
),
2
);
}
#endif
for
(
;
i
<=
n
-
4
;
i
+=
4
)
result
+=
popCountTable
[
a
[
i
]]
+
popCountTable
[
a
[
i
+
1
]]
+
popCountTable
[
a
[
i
+
2
]]
+
popCountTable
[
a
[
i
+
3
]];
for
(
;
i
<
n
;
i
++
)
result
+=
popCountTable
[
a
[
i
]];
return
Error
::
Ok
;
}
Error
::
Code
normHamming
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
,
int
&
result
)
{
int
i
=
0
;
result
=
0
;
#if CV_NEON
{
uint32x4_t
bits
=
vmovq_n_u32
(
0
);
for
(;
i
<=
n
-
16
;
i
+=
16
)
{
uint8x16_t
A_vec
=
vld1q_u8
(
a
+
i
);
uint8x16_t
B_vec
=
vld1q_u8
(
b
+
i
);
uint8x16_t
AxorB
=
veorq_u8
(
A_vec
,
B_vec
);
uint8x16_t
bitsSet
=
vcntq_u8
(
AxorB
);
uint16x8_t
bitSet8
=
vpaddlq_u8
(
bitsSet
);
uint32x4_t
bitSet4
=
vpaddlq_u16
(
bitSet8
);
bits
=
vaddq_u32
(
bits
,
bitSet4
);
}
uint64x2_t
bitSet2
=
vpaddlq_u32
(
bits
);
result
=
vgetq_lane_s32
(
vreinterpretq_s32_u64
(
bitSet2
),
0
);
result
+=
vgetq_lane_s32
(
vreinterpretq_s32_u64
(
bitSet2
),
2
);
}
#endif
for
(
;
i
<=
n
-
4
;
i
+=
4
)
result
+=
popCountTable
[
a
[
i
]
^
b
[
i
]]
+
popCountTable
[
a
[
i
+
1
]
^
b
[
i
+
1
]]
+
popCountTable
[
a
[
i
+
2
]
^
b
[
i
+
2
]]
+
popCountTable
[
a
[
i
+
3
]
^
b
[
i
+
3
]];
for
(
;
i
<
n
;
i
++
)
result
+=
popCountTable
[
a
[
i
]
^
b
[
i
]];
return
Error
::
Ok
;
}
Error
::
Code
normHamming
(
const
uchar
*
a
,
int
n
,
int
cellSize
,
int
&
result
)
{
if
(
cellSize
==
1
)
return
normHamming
(
a
,
n
,
result
);
const
uchar
*
tab
=
0
;
if
(
cellSize
==
2
)
tab
=
popCountTable2
;
else
if
(
cellSize
==
4
)
tab
=
popCountTable4
;
else
return
Error
::
Unknown
;
int
i
=
0
;
result
=
0
;
#if CV_ENABLE_UNROLLED
for
(
;
i
<=
n
-
4
;
i
+=
4
)
result
+=
tab
[
a
[
i
]]
+
tab
[
a
[
i
+
1
]]
+
tab
[
a
[
i
+
2
]]
+
tab
[
a
[
i
+
3
]];
#endif
for
(
;
i
<
n
;
i
++
)
result
+=
tab
[
a
[
i
]];
return
Error
::
Ok
;
}
Error
::
Code
normHamming
(
const
uchar
*
a
,
const
uchar
*
b
,
int
n
,
int
cellSize
,
int
&
result
)
{
if
(
cellSize
==
1
)
return
normHamming
(
a
,
b
,
n
,
result
);
const
uchar
*
tab
=
0
;
if
(
cellSize
==
2
)
tab
=
popCountTable2
;
else
if
(
cellSize
==
4
)
tab
=
popCountTable4
;
else
return
Error
::
Unknown
;
int
i
=
0
;
result
=
0
;
#if CV_ENABLE_UNROLLED
for
(
;
i
<=
n
-
4
;
i
+=
4
)
result
+=
tab
[
a
[
i
]
^
b
[
i
]]
+
tab
[
a
[
i
+
1
]
^
b
[
i
+
1
]]
+
tab
[
a
[
i
+
2
]
^
b
[
i
+
2
]]
+
tab
[
a
[
i
+
3
]
^
b
[
i
+
3
]];
#endif
for
(
;
i
<
n
;
i
++
)
result
+=
tab
[
a
[
i
]
^
b
[
i
]];
return
Error
::
Ok
;
}
}}
//cv::hal
modules/hal/src/precomp.hpp
0 → 100644
浏览文件 @
35b21399
#include "opencv2/hal.hpp"
modules/java/CMakeLists.txt
浏览文件 @
35b21399
...
...
@@ -10,6 +10,7 @@ endif()
set
(
the_description
"The java bindings"
)
ocv_add_module
(
java BINDINGS opencv_core opencv_imgproc
)
ocv_module_include_directories
(
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/generator/src/cpp"
)
ocv_module_include_directories
(
"
${
OpenCV_SOURCE_DIR
}
/include"
)
if
(
NOT ANDROID
)
include_directories
(
${
JNI_INCLUDE_DIRS
}
)
...
...
samples/cpp/CMakeLists.txt
浏览文件 @
35b21399
...
...
@@ -15,7 +15,7 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND)
project
(
cpp_samples
)
ocv_include_directories
(
"
${
OpenCV_SOURCE_DIR
}
/include"
)
#for opencv.hpp
ocv_include_modules
(
${
OPENCV_CPP_SAMPLES_REQUIRED_DEPS
}
)
ocv_include_modules
_recurse
(
${
OPENCV_CPP_SAMPLES_REQUIRED_DEPS
}
)
if
(
HAVE_opencv_cudaoptflow
)
ocv_include_directories
(
"
${
OpenCV_SOURCE_DIR
}
/modules/cudaoptflow/include"
)
...
...
samples/directx/CMakeLists.txt
浏览文件 @
35b21399
...
...
@@ -8,7 +8,7 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND)
project
(
"
${
project
}
_samples"
)
ocv_include_modules
(
${
OPENCV_DIRECTX_SAMPLES_REQUIRED_DEPS
}
)
ocv_include_modules
_recurse
(
${
OPENCV_DIRECTX_SAMPLES_REQUIRED_DEPS
}
)
# ---------------------------------------------
# Define executable targets
...
...
samples/gpu/CMakeLists.txt
浏览文件 @
35b21399
...
...
@@ -13,7 +13,7 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND)
project
(
"
${
project
}
_samples"
)
ocv_include_modules
(
${
OPENCV_CUDA_SAMPLES_REQUIRED_DEPS
}
)
ocv_include_modules
_recurse
(
${
OPENCV_CUDA_SAMPLES_REQUIRED_DEPS
}
)
ocv_include_directories
(
"
${
OpenCV_SOURCE_DIR
}
/modules/gpu/src/nvidia"
"
${
OpenCV_SOURCE_DIR
}
/modules/gpu/src/nvidia/core"
...
...
samples/tapi/CMakeLists.txt
浏览文件 @
35b21399
...
...
@@ -8,7 +8,7 @@ if(BUILD_EXAMPLES AND OCV_DEPENDENCIES_FOUND)
project
(
"
${
project
}
_samples"
)
ocv_include_modules
(
${
OPENCV_TAPI_SAMPLES_REQUIRED_DEPS
}
)
ocv_include_modules
_recurse
(
${
OPENCV_TAPI_SAMPLES_REQUIRED_DEPS
}
)
# ---------------------------------------------
# Define executable targets
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录