Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
edc08960
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,发现更多精彩内容 >>
提交
edc08960
编写于
5月 18, 2010
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixed source image corruption (ticket #306)
上级
eec30b08
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
29 addition
and
32 deletion
+29
-32
modules/imgproc/src/segmentation.cpp
modules/imgproc/src/segmentation.cpp
+29
-32
未找到文件。
modules/imgproc/src/segmentation.cpp
浏览文件 @
edc08960
...
...
@@ -321,9 +321,9 @@ cvPyrMeanShiftFiltering( const CvArr* srcarr, CvArr* dstarr,
{
const
int
cn
=
3
;
const
int
MAX_LEVELS
=
8
;
cv
::
Ptr
<
CvMat
>
src_pyramid
[
MAX_LEVELS
+
1
];
cv
::
Ptr
<
CvMat
>
dst_pyramid
[
MAX_LEVELS
+
1
];
cv
::
Ptr
<
CvMat
>
mask0
;
cv
::
Mat
src_pyramid
[
MAX_LEVELS
+
1
];
cv
::
Mat
dst_pyramid
[
MAX_LEVELS
+
1
];
cv
::
Mat
mask0
;
int
i
,
j
,
level
;
//uchar* submask = 0;
...
...
@@ -336,19 +336,16 @@ cvPyrMeanShiftFiltering( const CvArr* srcarr, CvArr* dstarr,
double
sr2
=
sr
*
sr
;
int
isr2
=
cvRound
(
sr2
),
isr22
=
MAX
(
isr2
,
16
);
int
tab
[
768
];
CvMat
sstub0
,
*
src0
;
CvMat
dstub0
,
*
dst0
;
cv
::
Mat
src0
=
cv
::
cvarrToMat
(
srcarr
)
;
cv
::
Mat
dst0
=
cv
::
cvarrToMat
(
dstarr
)
;
src0
=
cvGetMat
(
srcarr
,
&
sstub0
);
dst0
=
cvGetMat
(
dstarr
,
&
dstub0
);
if
(
CV_MAT_TYPE
(
src0
->
type
)
!=
CV_8UC3
)
if
(
src0
.
type
()
!=
CV_8UC3
)
CV_Error
(
CV_StsUnsupportedFormat
,
"Only 8-bit, 3-channel images are supported"
);
if
(
!
CV_ARE_TYPES_EQ
(
src0
,
dst0
)
)
if
(
src0
.
type
()
!=
dst0
.
type
()
)
CV_Error
(
CV_StsUnmatchedFormats
,
"The input and output images must have the same type"
);
if
(
!
CV_ARE_SIZES_EQ
(
src0
,
dst0
)
)
if
(
src0
.
size
()
!=
dst0
.
size
()
)
CV_Error
(
CV_StsUnmatchedSizes
,
"The input and output images must have the same size"
);
if
(
(
unsigned
)
max_level
>
(
unsigned
)
MAX_LEVELS
)
...
...
@@ -370,24 +367,24 @@ cvPyrMeanShiftFiltering( const CvArr* srcarr, CvArr* dstarr,
dst_pyramid
[
0
]
=
dst0
;
for
(
level
=
1
;
level
<=
max_level
;
level
++
)
{
src_pyramid
[
level
]
=
cvCreateMat
(
(
src_pyramid
[
level
-
1
]
->
rows
+
1
)
/
2
,
(
src_pyramid
[
level
-
1
]
->
cols
+
1
)
/
2
,
src_pyramid
[
level
-
1
]
->
type
);
dst_pyramid
[
level
]
=
cvCreateMat
(
src_pyramid
[
level
]
->
rows
,
src_pyramid
[
level
]
->
cols
,
src_pyramid
[
level
]
->
type
);
cv
P
yrDown
(
src_pyramid
[
level
-
1
],
src_pyramid
[
level
]
);
src_pyramid
[
level
]
.
create
(
(
src_pyramid
[
level
-
1
].
rows
+
1
)
/
2
,
(
src_pyramid
[
level
-
1
]
.
cols
+
1
)
/
2
,
src_pyramid
[
level
-
1
].
type
()
);
dst_pyramid
[
level
]
.
create
(
src_pyramid
[
level
].
rows
,
src_pyramid
[
level
]
.
cols
,
src_pyramid
[
level
].
type
()
);
cv
::
p
yrDown
(
src_pyramid
[
level
-
1
],
src_pyramid
[
level
]
);
//CV_CALL( cvResize( src_pyramid[level-1], src_pyramid[level], CV_INTER_AREA ));
}
mask0
=
cvCreateMat
(
src0
->
rows
,
src0
->
cols
,
CV_8UC1
);
mask0
.
create
(
src0
.
rows
,
src0
.
cols
,
CV_8UC1
);
//CV_CALL( submask = (uchar*)cvAlloc( (sp+2)*(sp+2) ));
// 2. apply meanshift, starting from the pyramid top (i.e. the smallest layer)
for
(
level
=
max_level
;
level
>=
0
;
level
--
)
{
CvMat
*
src
=
src_pyramid
[
level
];
CvSize
size
=
cvGetMatSize
(
src
);
uchar
*
sptr
=
src
->
data
.
ptr
;
int
sstep
=
src
->
step
;
cv
::
Mat
src
=
src_pyramid
[
level
];
cv
::
Size
size
=
src
.
size
(
);
uchar
*
sptr
=
src
.
data
;
int
sstep
=
src
.
step
;
uchar
*
mask
=
0
;
int
mstep
=
0
;
uchar
*
dptr
;
...
...
@@ -397,15 +394,15 @@ cvPyrMeanShiftFiltering( const CvArr* srcarr, CvArr* dstarr,
if
(
level
<
max_level
)
{
CvSize
size1
=
cvGetMatSize
(
dst_pyramid
[
level
+
1
]
);
CvMat
m
=
cvMat
(
size
.
height
,
size
.
width
,
CV_8UC1
,
mask0
->
data
.
ptr
);
dstep
=
dst_pyramid
[
level
+
1
]
->
step
;
dptr
=
dst_pyramid
[
level
+
1
]
->
data
.
ptr
+
dstep
+
cn
;
cv
::
Size
size1
=
dst_pyramid
[
level
+
1
].
size
(
);
cv
::
Mat
m
(
size
.
height
,
size
.
width
,
CV_8UC1
,
mask0
.
data
);
dstep
=
dst_pyramid
[
level
+
1
]
.
step
;
dptr
=
dst_pyramid
[
level
+
1
]
.
data
+
dstep
+
cn
;
mstep
=
m
.
step
;
mask
=
m
.
data
.
ptr
+
mstep
;
mask
=
m
.
data
+
mstep
;
//cvResize( dst_pyramid[level+1], dst_pyramid[level], CV_INTER_CUBIC );
cv
P
yrUp
(
dst_pyramid
[
level
+
1
],
dst_pyramid
[
level
]
);
cvZero
(
&
m
);
cv
::
p
yrUp
(
dst_pyramid
[
level
+
1
],
dst_pyramid
[
level
]
);
m
.
setTo
(
cv
::
Scalar
::
all
(
0
)
);
for
(
i
=
1
;
i
<
size1
.
height
-
1
;
i
++
,
dptr
+=
dstep
-
(
size1
.
width
-
2
)
*
3
,
mask
+=
mstep
*
2
)
{
...
...
@@ -417,12 +414,12 @@ cvPyrMeanShiftFiltering( const CvArr* srcarr, CvArr* dstarr,
}
}
cv
Dilate
(
&
m
,
&
m
,
0
,
1
);
mask
=
m
.
data
.
ptr
;
cv
::
dilate
(
m
,
m
,
cv
::
Mat
()
);
mask
=
m
.
data
;
}
dptr
=
dst_pyramid
[
level
]
->
data
.
ptr
;
dstep
=
dst_pyramid
[
level
]
->
step
;
dptr
=
dst_pyramid
[
level
]
.
data
;
dstep
=
dst_pyramid
[
level
]
.
step
;
for
(
i
=
0
;
i
<
size
.
height
;
i
++
,
sptr
+=
sstep
-
size
.
width
*
3
,
dptr
+=
dstep
-
size
.
width
*
3
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录