PythonCV学习记录10——角点检测

零之前言

这一章的数学我真的有点看不懂,没有认真专研过,所以,这节内容的代码主要搞清楚参数怎么设置,然后参数怎么调会有怎样的结果就可以了。

一.图像特征

对于图像的特征提取,一个关键的特征就是角点。角点是比较好检测的一种东西。做过软件识图的都知道,如果没有角点的搜寻图,纯色搜寻很容易搜索到其他的东西,那为什么说角点能够作比较好的特征检测的东西呢?

尝试移动一下这三个框,就很容易知道结果了。

二.Harris 角点检测

import cv2
import numpy as np

# 进行角点检测
# 第一步:读取图片
img = cv2.imread('test.jpg')
# 第二步:进行灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 第三步:进行角点检测
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 第四步:进行画图秒点操作
img[dst > 0.01*dst.max()] = (0, 0, 255)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

对于其中dst = cv2.cornerHarris(gray, 2, 3, 0.04)。

2是窗口大小,改大会导致点局部的点变多

3求导中使用的窗口大小

k - Harris 角点检测方程中的自由参数,取值参数为 [0,04,0.06],越大点越少

img[dst > 0.01*dst.max()] = (0, 0, 255),这个函数的代码,我反正是没搞懂,里面加了判断还能运行,在其他的情况下,我是出现了报错

img = [[[255 ,255 ,255],[255 ,255 ,255]],[[255, 255, 255],[255, 255, 255]],[[255, 255 ,255], [255, 255, 255]]]
img[img>2]= [0,0,0]
TypeError: '>' not supported between instances of 'list' and 'int'

改大0.01这个值也会导致点变少

三.Shi-Tomasi 角点检测& 适合于跟踪的图像特征

通常情况下,输入的应该是灰度图像。然后确定你想要检测到的角点数目。再设置角点的质量水平,0到 1 之间。它代表了角点的最低质量,低于这个数的所有角点都会被忽略。最后在设置两个角点之间的最短欧式距离。
根据这些信息,函数就能在图像上找到角点。所有低于质量水平的角点都会被忽略。然后再把合格角点按角点质量进行降序排列。函数会采用角点质量最高的那个角点(排序后的第一个),然后将它附近(最小距离之内)的角点都删掉。按着这样的方式最后返回 N 个最佳角点。

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(gray,25,0.01,10)
corners = np.int0(corners)

for i in corners:
    x,y = i.ravel()
    cv2.circle(img,(x,y),3,(255,0,255),-1)

cv2.imshow('1',img)
cv2.waitKey(0)

四.剩下几种

都差不多,能用就行,也都不会太深入,懒得搬运了。看书,或者看博客的搬运。

https://www.cnblogs.com/Undo-self-blog/p/8447728.html

发布了63 篇原创文章 · 获赞 38 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u011017694/article/details/100053807