Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
ab2c21e7
O
Opencv
项目概览
Greenplum
/
Opencv
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
ab2c21e7
编写于
5月 18, 2018
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #11531 from alalek:issue_11518
上级
949067cf
491e3627
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
30 addition
and
19 deletion
+30
-19
modules/photo/src/seamless_cloning_impl.cpp
modules/photo/src/seamless_cloning_impl.cpp
+4
-2
modules/photo/test/test_cloning.cpp
modules/photo/test/test_cloning.cpp
+26
-17
未找到文件。
modules/photo/src/seamless_cloning_impl.cpp
浏览文件 @
ab2c21e7
...
...
@@ -251,13 +251,15 @@ void Cloning::initVariables(const Mat &destination, const Mat &binaryMask)
//init of the filters used in the dst
const
int
w
=
destination
.
cols
;
filter_X
.
resize
(
w
-
2
);
double
scale
=
CV_PI
/
(
w
-
1
);
for
(
int
i
=
0
;
i
<
w
-
2
;
++
i
)
filter_X
[
i
]
=
2.0
f
*
std
::
cos
(
static_cast
<
float
>
(
CV_PI
)
*
(
i
+
1
)
/
(
w
-
1
));
filter_X
[
i
]
=
2.0
f
*
(
float
)
std
::
cos
(
scale
*
(
i
+
1
));
const
int
h
=
destination
.
rows
;
filter_Y
.
resize
(
h
-
2
);
scale
=
CV_PI
/
(
h
-
1
);
for
(
int
j
=
0
;
j
<
h
-
2
;
++
j
)
filter_Y
[
j
]
=
2.0
f
*
std
::
cos
(
static_cast
<
float
>
(
CV_PI
)
*
(
j
+
1
)
/
(
h
-
1
));
filter_Y
[
j
]
=
2.0
f
*
(
float
)
std
::
cos
(
scale
*
(
j
+
1
));
}
void
Cloning
::
computeDerivatives
(
const
Mat
&
destination
,
const
Mat
&
patch
,
const
Mat
&
binaryMask
)
...
...
modules/photo/test/test_cloning.cpp
浏览文件 @
ab2c21e7
...
...
@@ -53,7 +53,7 @@ namespace opencv_test { namespace {
#define SAVE(x)
#endif
static
const
double
numerical_precision
=
1000.
;
static
const
double
numerical_precision
=
0.05
;
// 95% of pixels should have exact values
TEST
(
Photo_SeamlessClone_normal
,
regression
)
{
...
...
@@ -82,8 +82,10 @@ TEST(Photo_SeamlessClone_normal, regression)
SAVE
(
result
);
double
error
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
error
,
numerical_precision
);
double
errorINF
=
cvtest
::
norm
(
reference
,
result
,
NORM_INF
);
EXPECT_LE
(
errorINF
,
1
);
double
errorL1
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
errorL1
,
reference
.
total
()
*
numerical_precision
)
<<
"size="
<<
reference
.
size
();
}
TEST
(
Photo_SeamlessClone_mixed
,
regression
)
...
...
@@ -113,9 +115,10 @@ TEST(Photo_SeamlessClone_mixed, regression)
Mat
reference
=
imread
(
reference_path
);
ASSERT_FALSE
(
reference
.
empty
())
<<
"Could not load reference image "
<<
reference_path
;
double
error
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
error
,
numerical_precision
);
double
errorINF
=
cvtest
::
norm
(
reference
,
result
,
NORM_INF
);
EXPECT_LE
(
errorINF
,
1
);
double
errorL1
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
errorL1
,
reference
.
total
()
*
numerical_precision
)
<<
"size="
<<
reference
.
size
();
}
TEST
(
Photo_SeamlessClone_featureExchange
,
regression
)
...
...
@@ -145,9 +148,10 @@ TEST(Photo_SeamlessClone_featureExchange, regression)
Mat
reference
=
imread
(
reference_path
);
ASSERT_FALSE
(
reference
.
empty
())
<<
"Could not load reference image "
<<
reference_path
;
double
error
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
error
,
numerical_precision
);
double
errorINF
=
cvtest
::
norm
(
reference
,
result
,
NORM_INF
);
EXPECT_LE
(
errorINF
,
1
);
double
errorL1
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
errorL1
,
reference
.
total
()
*
numerical_precision
)
<<
"size="
<<
reference
.
size
();
}
TEST
(
Photo_SeamlessClone_colorChange
,
regression
)
...
...
@@ -171,9 +175,10 @@ TEST(Photo_SeamlessClone_colorChange, regression)
Mat
reference
=
imread
(
reference_path
);
ASSERT_FALSE
(
reference
.
empty
())
<<
"Could not load reference image "
<<
reference_path
;
double
error
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
error
,
numerical_precision
);
double
errorINF
=
cvtest
::
norm
(
reference
,
result
,
NORM_INF
);
EXPECT_LE
(
errorINF
,
1
);
double
errorL1
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
errorL1
,
reference
.
total
()
*
numerical_precision
)
<<
"size="
<<
reference
.
size
();
}
TEST
(
Photo_SeamlessClone_illuminationChange
,
regression
)
...
...
@@ -195,9 +200,12 @@ TEST(Photo_SeamlessClone_illuminationChange, regression)
SAVE
(
result
);
Mat
reference
=
imread
(
reference_path
);
double
error
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
error
,
numerical_precision
);
ASSERT_FALSE
(
reference
.
empty
())
<<
"Could not load reference image "
<<
reference_path
;
double
errorINF
=
cvtest
::
norm
(
reference
,
result
,
NORM_INF
);
EXPECT_LE
(
errorINF
,
1
);
double
errorL1
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
errorL1
,
reference
.
total
()
*
numerical_precision
)
<<
"size="
<<
reference
.
size
();
}
TEST
(
Photo_SeamlessClone_textureFlattening
,
regression
)
...
...
@@ -221,9 +229,10 @@ TEST(Photo_SeamlessClone_textureFlattening, regression)
Mat
reference
=
imread
(
reference_path
);
ASSERT_FALSE
(
reference
.
empty
())
<<
"Could not load reference image "
<<
reference_path
;
double
error
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
error
,
numerical_precision
);
double
errorINF
=
cvtest
::
norm
(
reference
,
result
,
NORM_INF
);
EXPECT_LE
(
errorINF
,
1
);
double
errorL1
=
cvtest
::
norm
(
reference
,
result
,
NORM_L1
);
EXPECT_LE
(
errorL1
,
reference
.
total
()
*
numerical_precision
)
<<
"size="
<<
reference
.
size
();
}
}}
// namespace
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录