Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
e18427b1
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,发现更多精彩内容 >>
提交
e18427b1
编写于
11月 22, 2010
作者:
V
Vadim Pisarevsky
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
another fix on the ticket #518 - ignore all the circles with radius outside of the specified range
上级
ce41f74a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
21 addition
and
11 deletion
+21
-11
modules/imgproc/src/hough.cpp
modules/imgproc/src/hough.cpp
+21
-11
未找到文件。
modules/imgproc/src/hough.cpp
浏览文件 @
e18427b1
...
...
@@ -808,7 +808,9 @@ icvHoughCirclesGradient( CvMat* img, float dp, float min_dist,
std
::
vector
<
int
>
sort_buf
;
cv
::
Ptr
<
CvMemStorage
>
storage
;
int
x
,
y
,
i
,
j
,
center_count
,
nz_count
;
int
x
,
y
,
i
,
j
,
k
,
center_count
,
nz_count
;
float
min_radius2
=
(
float
)
min_radius
*
min_radius
;
float
max_radius2
=
(
float
)
max_radius
*
max_radius
;
int
rows
,
cols
,
arows
,
acols
;
int
astep
,
*
adata
;
float
*
ddata
;
...
...
@@ -817,7 +819,7 @@ icvHoughCirclesGradient( CvMat* img, float dp, float min_dist,
CvSeqReader
reader
;
edges
=
cvCreateMat
(
img
->
rows
,
img
->
cols
,
CV_8UC1
);
cvCanny
(
img
,
edges
,
MAX
(
canny_threshold
/
5
,
1
),
canny_threshold
,
3
);
cvCanny
(
img
,
edges
,
MAX
(
canny_threshold
/
2
,
1
),
canny_threshold
,
3
);
dx
=
cvCreateMat
(
img
->
rows
,
img
->
cols
,
CV_16SC1
);
dy
=
cvCreateMat
(
img
->
rows
,
img
->
cols
,
CV_16SC1
);
...
...
@@ -929,7 +931,6 @@ icvHoughCirclesGradient( CvMat* img, float dp, float min_dist,
y
=
ofs
/
(
acols
+
2
)
-
1
;
x
=
ofs
-
(
y
+
1
)
*
(
acols
+
2
)
-
1
;
float
cx
=
(
float
)(
x
*
dp
),
cy
=
(
float
)(
y
*
dp
);
int
start_idx
=
nz_count
-
1
;
float
start_dist
,
dist_sum
;
float
r_best
=
0
,
c
[
3
];
int
max_count
=
R_THRESH
;
...
...
@@ -945,21 +946,30 @@ icvHoughCirclesGradient( CvMat* img, float dp, float min_dist,
continue
;
cvStartReadSeq
(
nz
,
&
reader
);
for
(
j
=
0
;
j
<
nz_count
;
j
++
)
for
(
j
=
k
=
0
;
j
<
nz_count
;
j
++
)
{
CvPoint
pt
;
float
_dx
,
_dy
;
float
_dx
,
_dy
,
_r2
;
CV_READ_SEQ_ELEM
(
pt
,
reader
);
_dx
=
cx
-
pt
.
x
;
_dy
=
cy
-
pt
.
y
;
ddata
[
j
]
=
_dx
*
_dx
+
_dy
*
_dy
;
sort_buf
[
j
]
=
j
;
_r2
=
_dx
*
_dx
+
_dy
*
_dy
;
if
(
min_radius2
<=
_r2
&&
_r2
<=
max_radius2
)
{
ddata
[
k
]
=
_r2
;
sort_buf
[
k
]
=
k
;
k
++
;
}
}
int
nz_count1
=
k
,
start_idx
=
nz_count1
-
1
;
if
(
nz_count1
==
0
)
continue
;
dist_buf
->
cols
=
nz_count1
;
cvPow
(
dist_buf
,
dist_buf
,
0.5
);
icvHoughSortDescent32s
(
&
sort_buf
[
0
],
nz_count
,
(
int
*
)
ddata
);
icvHoughSortDescent32s
(
&
sort_buf
[
0
],
nz_count
1
,
(
int
*
)
ddata
);
dist_sum
=
start_dist
=
ddata
[
sort_buf
[
nz_count
-
1
]];
for
(
j
=
nz_count
-
2
;
j
>=
0
;
j
--
)
dist_sum
=
start_dist
=
ddata
[
sort_buf
[
nz_count
1
-
1
]];
for
(
j
=
nz_count
1
-
2
;
j
>=
0
;
j
--
)
{
float
d
=
ddata
[
sort_buf
[
j
]];
...
...
@@ -970,7 +980,7 @@ icvHoughCirclesGradient( CvMat* img, float dp, float min_dist,
{
float
r_cur
=
ddata
[
sort_buf
[(
j
+
start_idx
)
/
2
]];
if
(
(
start_idx
-
j
)
*
r_best
>=
max_count
*
r_cur
||
(
r_best
<
FLT_EPSILON
&&
start_idx
-
j
>=
max_count
)
)
(
r_best
<
FLT_EPSILON
&&
start_idx
-
j
>=
max_count
)
)
{
r_best
=
r_cur
;
max_count
=
start_idx
-
j
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录