Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenCV
opencv
提交
7b2ef647
O
opencv
项目概览
OpenCV
/
opencv
上一次同步 9 个月
通知
992
Star
71100
Fork
55581
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7b2ef647
编写于
7月 16, 2016
作者:
R
Rostislav Vasilikhin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixed memory corruption when normal dist. params have less channels than target matrix; test added
上级
5e4d3559
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
24 addition
and
7 deletion
+24
-7
modules/core/src/rand.cpp
modules/core/src/rand.cpp
+7
-7
modules/core/test/test_rand.cpp
modules/core/test/test_rand.cpp
+17
-0
未找到文件。
modules/core/src/rand.cpp
浏览文件 @
7b2ef647
...
...
@@ -622,7 +622,7 @@ void RNG::fill( InputOutputArray _mat, int disttype,
int
ptype
=
depth
==
CV_64F
?
CV_64F
:
CV_32F
;
int
esz
=
(
int
)
CV_ELEM_SIZE
(
ptype
);
if
(
_param1
.
isContinuous
()
&&
_param1
.
type
()
==
ptype
)
if
(
_param1
.
isContinuous
()
&&
_param1
.
type
()
==
ptype
&&
n1
>=
cn
)
mean
=
_param1
.
data
;
else
{
...
...
@@ -635,18 +635,18 @@ void RNG::fill( InputOutputArray _mat, int disttype,
for
(
j
=
n1
*
esz
;
j
<
cn
*
esz
;
j
++
)
mean
[
j
]
=
mean
[
j
-
n1
*
esz
];
if
(
_param2
.
isContinuous
()
&&
_param2
.
type
()
==
ptype
)
if
(
_param2
.
isContinuous
()
&&
_param2
.
type
()
==
ptype
&&
n2
>=
cn
)
stddev
=
_param2
.
data
;
else
{
Mat
tmp
(
_param2
.
size
(),
ptype
,
parambuf
+
cn
);
Mat
tmp
(
_param2
.
size
(),
ptype
,
parambuf
+
MAX
(
n1
,
cn
)
);
_param2
.
convertTo
(
tmp
,
ptype
);
stddev
=
(
uchar
*
)(
parambuf
+
cn
);
stddev
=
(
uchar
*
)(
parambuf
+
MAX
(
n1
,
cn
)
);
}
if
(
n
1
<
cn
)
for
(
j
=
n
1
*
esz
;
j
<
cn
*
esz
;
j
++
)
stddev
[
j
]
=
stddev
[
j
-
n
1
*
esz
];
if
(
n
2
<
cn
)
for
(
j
=
n
2
*
esz
;
j
<
cn
*
esz
;
j
++
)
stddev
[
j
]
=
stddev
[
j
-
n
2
*
esz
];
stdmtx
=
_param2
.
rows
==
cn
&&
_param2
.
cols
==
cn
;
scaleFunc
=
randnScaleTab
[
depth
];
...
...
modules/core/test/test_rand.cpp
浏览文件 @
7b2ef647
...
...
@@ -365,3 +365,20 @@ TEST(Core_RNG_MT19937, regression)
ASSERT_EQ
(
expected
[
i
],
actual
[
i
]);
}
}
TEST
(
Core_Rand
,
Regression_Stack_Corruption
)
{
int
bufsz
=
128
;
//enough for 14 doubles
AutoBuffer
<
uchar
>
buffer
(
bufsz
);
size_t
offset
=
0
;
cv
::
Mat_
<
cv
::
Point2d
>
x
(
2
,
3
,
(
cv
::
Point2d
*
)(
buffer
+
offset
));
offset
+=
x
.
total
()
*
x
.
elemSize
();
double
&
param1
=
*
(
double
*
)(
buffer
+
offset
);
offset
+=
sizeof
(
double
);
double
&
param2
=
*
(
double
*
)(
buffer
+
offset
);
offset
+=
sizeof
(
double
);
param1
=
-
9
;
param2
=
2
;
cv
::
theRNG
().
fill
(
x
,
cv
::
RNG
::
NORMAL
,
param1
,
param2
);
ASSERT_EQ
(
param1
,
-
9
);
ASSERT_EQ
(
param2
,
2
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录