Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Opencv
提交
b3ae2c18
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,发现更多精彩内容 >>
提交
b3ae2c18
编写于
8月 17, 2011
作者:
A
Alexander Mordvintsev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
added flann matching to find_obj.py
上级
d3d55f32
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
31 addition
and
8 deletion
+31
-8
samples/python2/find_obj.py
samples/python2/find_obj.py
+31
-8
未找到文件。
samples/python2/find_obj.py
浏览文件 @
b3ae2c18
import
numpy
as
np
import
cv2
from
common
import
anorm
from
functools
import
partial
help_message
=
'''SURF image match
USAGE: findobj.py [ <image1> <image2> ]
'''
FLANN_INDEX_KDTREE
=
1
# bug: flann enums are missing
def
match
(
desc1
,
desc2
,
r_threshold
=
0.75
):
flann_params
=
dict
(
algorithm
=
FLANN_INDEX_KDTREE
,
trees
=
4
)
def
match_bruteforce
(
desc1
,
desc2
,
r_threshold
=
0.75
):
res
=
[]
for
i
in
xrange
(
len
(
desc1
)):
dist
=
anorm
(
desc2
-
desc1
[
i
]
)
...
...
@@ -18,6 +23,14 @@ def match(desc1, desc2, r_threshold = 0.75):
res
.
append
((
i
,
n1
))
return
np
.
array
(
res
)
def
match_flann
(
desc1
,
desc2
,
r_threshold
=
0.6
):
flann
=
cv2
.
flann_Index
(
desc2
,
flann_params
)
idx2
,
dist
=
flann
.
knnSearch
(
desc1
,
2
,
params
=
{})
# bug: need to provide empty dict
mask
=
dist
[:,
0
]
/
dist
[:,
1
]
<
r_threshold
idx1
=
np
.
arange
(
len
(
desc1
))
pairs
=
np
.
int32
(
zip
(
idx1
,
idx2
[:,
0
])
)
return
pairs
[
mask
]
def
draw_match
(
img1
,
img2
,
p1
,
p2
,
status
=
None
,
H
=
None
):
h1
,
w1
=
img1
.
shape
[:
2
]
h2
,
w2
=
img2
.
shape
[:
2
]
...
...
@@ -50,6 +63,7 @@ def draw_match(img1, img2, p1, p2, status = None, H = None):
cv2
.
line
(
vis
,
(
x2
+
w1
-
r
,
y2
+
r
),
(
x2
+
w1
+
r
,
y2
-
r
),
col
,
thickness
)
return
vis
if
__name__
==
'__main__'
:
import
sys
try
:
fn1
,
fn2
=
sys
.
argv
[
1
:
3
]
...
...
@@ -68,12 +82,21 @@ if __name__ == '__main__':
desc2
.
shape
=
(
-
1
,
surf
.
descriptorSize
())
print
'img1 - %d features, img2 - %d features'
%
(
len
(
kp1
),
len
(
kp2
))
m
=
match
(
desc1
,
desc2
)
matched_p1
=
np
.
array
([
kp1
[
i
].
pt
for
i
,
j
in
m
])
matched_p2
=
np
.
array
([
kp2
[
j
].
pt
for
i
,
j
in
m
])
H
,
status
=
cv2
.
findHomography
(
matched_p1
,
matched_p2
,
cv2
.
RANSAC
,
10.0
)
print
'%d / %d inliers/matched'
%
(
np
.
sum
(
status
),
len
(
status
))
def
match_and_draw
(
match
,
r_threshold
):
m
=
match
(
desc1
,
desc2
,
r_threshold
)
matched_p1
=
np
.
array
([
kp1
[
i
].
pt
for
i
,
j
in
m
])
matched_p2
=
np
.
array
([
kp2
[
j
].
pt
for
i
,
j
in
m
])
H
,
status
=
cv2
.
findHomography
(
matched_p1
,
matched_p2
,
cv2
.
RANSAC
,
5.0
)
print
'%d / %d inliers/matched'
%
(
np
.
sum
(
status
),
len
(
status
))
vis
=
draw_match
(
img1
,
img2
,
matched_p1
,
matched_p2
,
status
,
H
)
return
vis
vis
=
draw_match
(
img1
,
img2
,
matched_p1
,
matched_p2
,
status
,
H
)
cv2
.
imshow
(
'find_obj SURF'
,
vis
)
print
'bruteforce match:'
,
vis_brute
=
match_and_draw
(
match_bruteforce
,
0.75
)
print
'flann match:'
,
vis_flann
=
match_and_draw
(
match_flann
,
0.6
)
# flann tends to find more distant second
# neighbours, so r_threshold is decreased
cv2
.
imshow
(
'find_obj SURF'
,
vis_brute
)
cv2
.
imshow
(
'find_obj SURF flann'
,
vis_flann
)
cv2
.
waitKey
()
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录