Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
377dd042
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,发现更多精彩内容 >>
提交
377dd042
编写于
3月 20, 2020
作者:
A
Alexander Alekhin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core: fix .begin()/.end() of empty Mat
上级
8ac33369
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
19 addition
and
0 deletion
+19
-0
modules/core/include/opencv2/core/mat.inl.hpp
modules/core/include/opencv2/core/mat.inl.hpp
+11
-0
modules/core/test/test_mat.cpp
modules/core/test/test_mat.cpp
+8
-0
未找到文件。
modules/core/include/opencv2/core/mat.inl.hpp
浏览文件 @
377dd042
...
@@ -1304,6 +1304,8 @@ const _Tp& Mat::at(const Vec<int, n>& idx) const
...
@@ -1304,6 +1304,8 @@ const _Tp& Mat::at(const Vec<int, n>& idx) const
template
<
typename
_Tp
>
inline
template
<
typename
_Tp
>
inline
MatConstIterator_
<
_Tp
>
Mat
::
begin
()
const
MatConstIterator_
<
_Tp
>
Mat
::
begin
()
const
{
{
if
(
empty
())
return
MatConstIterator_
<
_Tp
>
();
CV_DbgAssert
(
elemSize
()
==
sizeof
(
_Tp
)
);
CV_DbgAssert
(
elemSize
()
==
sizeof
(
_Tp
)
);
return
MatConstIterator_
<
_Tp
>
((
const
Mat_
<
_Tp
>*
)
this
);
return
MatConstIterator_
<
_Tp
>
((
const
Mat_
<
_Tp
>*
)
this
);
}
}
...
@@ -1311,6 +1313,8 @@ MatConstIterator_<_Tp> Mat::begin() const
...
@@ -1311,6 +1313,8 @@ MatConstIterator_<_Tp> Mat::begin() const
template
<
typename
_Tp
>
inline
template
<
typename
_Tp
>
inline
MatConstIterator_
<
_Tp
>
Mat
::
end
()
const
MatConstIterator_
<
_Tp
>
Mat
::
end
()
const
{
{
if
(
empty
())
return
MatConstIterator_
<
_Tp
>
();
CV_DbgAssert
(
elemSize
()
==
sizeof
(
_Tp
)
);
CV_DbgAssert
(
elemSize
()
==
sizeof
(
_Tp
)
);
MatConstIterator_
<
_Tp
>
it
((
const
Mat_
<
_Tp
>*
)
this
);
MatConstIterator_
<
_Tp
>
it
((
const
Mat_
<
_Tp
>*
)
this
);
it
+=
total
();
it
+=
total
();
...
@@ -1320,6 +1324,8 @@ MatConstIterator_<_Tp> Mat::end() const
...
@@ -1320,6 +1324,8 @@ MatConstIterator_<_Tp> Mat::end() const
template
<
typename
_Tp
>
inline
template
<
typename
_Tp
>
inline
MatIterator_
<
_Tp
>
Mat
::
begin
()
MatIterator_
<
_Tp
>
Mat
::
begin
()
{
{
if
(
empty
())
return
MatIterator_
<
_Tp
>
();
CV_DbgAssert
(
elemSize
()
==
sizeof
(
_Tp
)
);
CV_DbgAssert
(
elemSize
()
==
sizeof
(
_Tp
)
);
return
MatIterator_
<
_Tp
>
((
Mat_
<
_Tp
>*
)
this
);
return
MatIterator_
<
_Tp
>
((
Mat_
<
_Tp
>*
)
this
);
}
}
...
@@ -1327,6 +1333,8 @@ MatIterator_<_Tp> Mat::begin()
...
@@ -1327,6 +1333,8 @@ MatIterator_<_Tp> Mat::begin()
template
<
typename
_Tp
>
inline
template
<
typename
_Tp
>
inline
MatIterator_
<
_Tp
>
Mat
::
end
()
MatIterator_
<
_Tp
>
Mat
::
end
()
{
{
if
(
empty
())
return
MatIterator_
<
_Tp
>
();
CV_DbgAssert
(
elemSize
()
==
sizeof
(
_Tp
)
);
CV_DbgAssert
(
elemSize
()
==
sizeof
(
_Tp
)
);
MatIterator_
<
_Tp
>
it
((
Mat_
<
_Tp
>*
)
this
);
MatIterator_
<
_Tp
>
it
((
Mat_
<
_Tp
>*
)
this
);
it
+=
total
();
it
+=
total
();
...
@@ -2690,6 +2698,7 @@ MatConstIterator::MatConstIterator(const Mat* _m)
...
@@ -2690,6 +2698,7 @@ MatConstIterator::MatConstIterator(const Mat* _m)
{
{
if
(
m
&&
m
->
isContinuous
()
)
if
(
m
&&
m
->
isContinuous
()
)
{
{
CV_Assert
(
!
m
->
empty
());
sliceStart
=
m
->
ptr
();
sliceStart
=
m
->
ptr
();
sliceEnd
=
sliceStart
+
m
->
total
()
*
elemSize
;
sliceEnd
=
sliceStart
+
m
->
total
()
*
elemSize
;
}
}
...
@@ -2703,6 +2712,7 @@ MatConstIterator::MatConstIterator(const Mat* _m, int _row, int _col)
...
@@ -2703,6 +2712,7 @@ MatConstIterator::MatConstIterator(const Mat* _m, int _row, int _col)
CV_Assert
(
m
&&
m
->
dims
<=
2
);
CV_Assert
(
m
&&
m
->
dims
<=
2
);
if
(
m
->
isContinuous
()
)
if
(
m
->
isContinuous
()
)
{
{
CV_Assert
(
!
m
->
empty
());
sliceStart
=
m
->
ptr
();
sliceStart
=
m
->
ptr
();
sliceEnd
=
sliceStart
+
m
->
total
()
*
elemSize
;
sliceEnd
=
sliceStart
+
m
->
total
()
*
elemSize
;
}
}
...
@@ -2717,6 +2727,7 @@ MatConstIterator::MatConstIterator(const Mat* _m, Point _pt)
...
@@ -2717,6 +2727,7 @@ MatConstIterator::MatConstIterator(const Mat* _m, Point _pt)
CV_Assert
(
m
&&
m
->
dims
<=
2
);
CV_Assert
(
m
&&
m
->
dims
<=
2
);
if
(
m
->
isContinuous
()
)
if
(
m
->
isContinuous
()
)
{
{
CV_Assert
(
!
m
->
empty
());
sliceStart
=
m
->
ptr
();
sliceStart
=
m
->
ptr
();
sliceEnd
=
sliceStart
+
m
->
total
()
*
elemSize
;
sliceEnd
=
sliceStart
+
m
->
total
()
*
elemSize
;
}
}
...
...
modules/core/test/test_mat.cpp
浏览文件 @
377dd042
...
@@ -2082,4 +2082,12 @@ TEST(Mat, regression_12943) // memory usage: ~4.5 Gb
...
@@ -2082,4 +2082,12 @@ TEST(Mat, regression_12943) // memory usage: ~4.5 Gb
cv
::
flip
(
src
,
dst
,
0
);
cv
::
flip
(
src
,
dst
,
0
);
}
}
TEST
(
Mat
,
empty_iterator_16855
)
{
cv
::
Mat
m
;
EXPECT_NO_THROW
(
m
.
begin
<
uchar
>
());
EXPECT_NO_THROW
(
m
.
end
<
uchar
>
());
EXPECT_TRUE
(
m
.
begin
<
uchar
>
()
==
m
.
end
<
uchar
>
());
}
}}
// namespace
}}
// namespace
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录