Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_opencv
提交
2c5b3c5e
S
skill_tree_opencv
项目概览
CSDN 技术社区
/
skill_tree_opencv
通知
142
Star
9
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
2
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_opencv
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
2
Issue
2
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
2c5b3c5e
编写于
12月 13, 2021
作者:
F
feilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Harris特征提取
上级
b4697401
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
136 addition
and
0 deletion
+136
-0
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/harris.md
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/harris.md
+93
-0
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/harris.py
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/harris.py
+43
-0
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/tower.jpeg
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/tower.jpeg
+0
-0
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/tower_harris.jpeg
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/tower_harris.jpeg
+0
-0
未找到文件。
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/harris.md
0 → 100644
浏览文件 @
2c5b3c5e
# 提取亭子瓦片特征
下图是一个湖边的亭子,通过 OpenCV 的 Harris 特征提取可以提取到亭子的瓦片特征

上图背景图里的植被的角点也会被 Harris 特征提取到,因此我们先用之前学习过的知识过滤出前景图后再做 Harris 特征提取,过程图片如下:

框架代码如下
```
python
import
cv2
import
numpy
as
np
def
close_op
(
img
):
kernel
=
np
.
ones
((
5
,
5
),
np
.
uint8
)
img1
=
cv2
.
dilate
(
img
,
kernel
,
iterations
=
1
)
img2
=
cv2
.
erode
(
img
,
kernel
,
iterations
=
1
)
return
img2
def
filter_green
(
img
):
hsv
=
cv2
.
cvtColor
(
img
,
cv2
.
COLOR_BGR2HSV
)
lower_green
=
np
.
array
([
50
,
100
,
50
])
upper_green
=
np
.
array
([
70
,
255
,
255
])
lower_red
=
np
.
array
([
0
,
20
,
100
])
upper_red
=
np
.
array
([
10
,
255
,
255
])
mask
=
cv2
.
inRange
(
hsv
,
lower_red
,
upper_red
)
res
=
cv2
.
bitwise_and
(
img
,
img
,
mask
=
mask
)
return
close_op
(
res
)
if
__name__
==
'__main__'
:
imput_img
=
'tower.jpeg'
ori
=
cv2
.
imread
(
imput_img
)
image
=
cv2
.
imread
(
imput_img
)
no_green
=
filter_green
(
image
)
# TODO(You): 请在此实现 Harris 特征提取
images
=
np
.
concatenate
((
ori
,
no_green
,
image
),
axis
=
1
)
cv2
.
imwrite
(
'tower_harris.jpeg'
,
images
)
cv2
.
imshow
(
'tower_harris'
,
images
)
cv2
.
waitKey
()
cv2
.
destroyAllWindows
()
```
以下正确实现通过 Harris 特征提取亭子瓦片角点的是?
## 答案
```
python
gray
=
cv2
.
cvtColor
(
no_green
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
np
.
float32
(
gray
)
dst
=
cv2
.
cornerHarris
(
gray
,
2
,
3
,
0.04
)
dst
=
cv2
.
dilate
(
dst
,
None
)
image
[
dst
>
0.01
*
dst
.
max
()]
=
[
0
,
0
,
255
]
```
## 选项
### 没有取灰度图
```
python
dst
=
cv2
.
cornerHarris
(
no_green
,
2
,
3
,
0.04
)
dst
=
cv2
.
dilate
(
dst
,
None
)
image
[
dst
>
0.01
*
dst
.
max
()]
=
[
0
,
0
,
255
]
```
### 没有做膨胀处理
```
python
gray
=
cv2
.
cvtColor
(
no_green
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
np
.
float32
(
gray
)
dst
=
cv2
.
cornerHarris
(
gray
,
2
,
3
,
0.04
)
image
[
dst
>
0.01
*
dst
.
max
()]
=
[
0
,
0
,
255
]
```
### 过滤掉代码不对
```
python
gray
=
cv2
.
cvtColor
(
no_green
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
np
.
float32
(
gray
)
dst
=
cv2
.
cornerHarris
(
gray
,
2
,
3
,
0.04
)
dst
=
cv2
.
dilate
(
dst
,
None
)
image
[
lambda
dst
:
dst
>
0.01
*
dst
.
max
()]
=
[
0
,
0
,
255
]
```
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/harris.py
0 → 100644
浏览文件 @
2c5b3c5e
import
cv2
import
numpy
as
np
def
close_op
(
img
):
kernel
=
np
.
ones
((
5
,
5
),
np
.
uint8
)
img1
=
cv2
.
dilate
(
img
,
kernel
,
iterations
=
1
)
img2
=
cv2
.
erode
(
img
,
kernel
,
iterations
=
1
)
return
img2
def
filter_green
(
img
):
hsv
=
cv2
.
cvtColor
(
img
,
cv2
.
COLOR_BGR2HSV
)
lower_green
=
np
.
array
([
50
,
100
,
50
])
upper_green
=
np
.
array
([
70
,
255
,
255
])
lower_red
=
np
.
array
([
0
,
20
,
100
])
upper_red
=
np
.
array
([
10
,
255
,
255
])
mask
=
cv2
.
inRange
(
hsv
,
lower_red
,
upper_red
)
res
=
cv2
.
bitwise_and
(
img
,
img
,
mask
=
mask
)
return
close_op
(
res
)
if
__name__
==
'__main__'
:
imput_img
=
'tower.jpeg'
ori
=
cv2
.
imread
(
imput_img
)
image
=
cv2
.
imread
(
imput_img
)
no_green
=
filter_green
(
image
)
gray
=
cv2
.
cvtColor
(
no_green
,
cv2
.
COLOR_BGR2GRAY
)
gray
=
np
.
float32
(
gray
)
dst
=
cv2
.
cornerHarris
(
gray
,
2
,
3
,
0.04
)
dst
=
cv2
.
dilate
(
dst
,
None
)
image
[
dst
>
0.01
*
dst
.
max
()]
=
[
0
,
0
,
255
]
images
=
np
.
concatenate
((
ori
,
no_green
,
image
),
axis
=
1
)
# cv2.imwrite('tower_harris.jpeg', images)
cv2
.
imshow
(
'tower_harris'
,
images
)
cv2
.
waitKey
()
cv2
.
destroyAllWindows
()
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/tower.jpeg
0 → 100644
浏览文件 @
2c5b3c5e
296.9 KB
data/1.OpenCV初阶/4.几何变换和图像特征/3.图像特征与特征提取/tower_harris.jpeg
0 → 100644
浏览文件 @
2c5b3c5e
824.0 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录