Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
65fcf226
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,发现更多精彩内容 >>
提交
65fcf226
编写于
6月 01, 2022
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
imgproc: use singleton in color_hsv.simd.hpp
上级
e9187ae3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
59 addition
and
18 deletion
+59
-18
modules/core/src/precomp.hpp
modules/core/src/precomp.hpp
+1
-0
modules/imgproc/src/color_hsv.simd.hpp
modules/imgproc/src/color_hsv.simd.hpp
+49
-17
modules/imgproc/src/precomp.hpp
modules/imgproc/src/precomp.hpp
+9
-1
未找到文件。
modules/core/src/precomp.hpp
浏览文件 @
65fcf226
...
...
@@ -372,6 +372,7 @@ extern CV_EXPORTS
bool
__termination
;
// skip some cleanups, because process is terminating
// (for example, if ExitProcess() was already called)
CV_EXPORTS
cv
::
Mutex
&
getInitializationMutex
();
/// @brief Returns timestamp in nanoseconds since program launch
...
...
modules/imgproc/src/color_hsv.simd.hpp
浏览文件 @
65fcf226
...
...
@@ -39,36 +39,65 @@ struct RGB2HSV_b
:
srccn
(
_srccn
),
blueIdx
(
_blueIdx
),
hrange
(
_hrange
)
{
CV_Assert
(
hrange
==
180
||
hrange
==
256
);
const
TablesSingleton
&
global_tables
=
TablesSingleton
::
getInstance
();
hdiv_table_
=
hrange
==
180
?
global_tables
.
hdiv_table180
:
global_tables
.
hdiv_table256
;
sdiv_table_
=
global_tables
.
sdiv_table
;
}
void
operator
()(
const
uchar
*
src
,
uchar
*
dst
,
int
n
)
const
struct
TablesSingleton
{
CV_INSTRUMENT_REGION
();
int
sdiv_table
[
256
];
int
hdiv_table180
[
256
];
int
hdiv_table256
[
256
];
int
i
,
bidx
=
blueIdx
,
scn
=
srccn
;
const
int
hsv_shift
=
12
;
static
int
sdiv_table
[
256
];
static
int
hdiv_table180
[
256
];
static
int
hdiv_table256
[
256
];
static
volatile
bool
initialized
=
false
;
int
hr
=
hrange
;
const
int
*
hdiv_table
=
hr
==
180
?
hdiv_table180
:
hdiv_table256
;
if
(
!
initialized
)
protected:
TablesSingleton
()
{
const
int
hsv_shift
=
12
;
sdiv_table
[
0
]
=
hdiv_table180
[
0
]
=
hdiv_table256
[
0
]
=
0
;
for
(
i
=
1
;
i
<
256
;
i
++
)
for
(
int
i
=
1
;
i
<
256
;
i
++
)
{
sdiv_table
[
i
]
=
saturate_cast
<
int
>
((
255
<<
hsv_shift
)
/
(
1.
*
i
));
hdiv_table180
[
i
]
=
saturate_cast
<
int
>
((
180
<<
hsv_shift
)
/
(
6.
*
i
));
hdiv_table256
[
i
]
=
saturate_cast
<
int
>
((
256
<<
hsv_shift
)
/
(
6.
*
i
));
}
initialized
=
true
;
}
public:
static
TablesSingleton
&
getInstance
()
{
#ifdef CV_CXX11
static
TablesSingleton
g_tables
;
return
g_tables
;
#else
static
TablesSingleton
*
volatile
g_tables
=
NULL
;
if
(
!
g_tables
)
{
AutoLock
lock
(
getInitializationMutex
());
if
(
!
g_tables
)
{
static
TablesSingleton
g_tablesInstance
;
g_tables
=
&
g_tablesInstance
;
}
}
return
*
g_tables
;
#endif
}
};
i
=
0
;
void
operator
()(
const
uchar
*
src
,
uchar
*
dst
,
int
n
)
const
{
CV_INSTRUMENT_REGION
();
int
bidx
=
blueIdx
,
scn
=
srccn
;
const
int
hsv_shift
=
12
;
int
hr
=
hrange
;
const
int
*
hdiv_table
/*[256]*/
=
hdiv_table_
;
const
int
*
sdiv_table
/*[256]*/
=
sdiv_table_
;
int
i
=
0
;
#if CV_SIMD
const
int
vsize
=
v_uint8
::
nlanes
;
...
...
@@ -231,6 +260,9 @@ struct RGB2HSV_b
}
int
srccn
,
blueIdx
,
hrange
;
const
int
*
hdiv_table_
/*[256]*/
;
const
int
*
sdiv_table_
/*[256]*/
;
};
...
...
modules/imgproc/src/precomp.hpp
浏览文件 @
65fcf226
...
...
@@ -119,4 +119,12 @@ inline bool isStorageOrMat(void * arr)
CV_Error
(
CV_StsBadArg
,
"Destination is not CvMemStorage* nor CvMat*"
);
}
#endif
/*__OPENCV_CV_INTERNAL_H_*/
namespace
cv
{
CV_EXPORTS
cv
::
Mutex
&
getInitializationMutex
();
// defined in core module
}
// namespace cv
#endif
/*__OPENCV_PRECOMP_H__*/
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录