82 角点检测—shi-tomas角点检测
代码
import numpy as np
import cv2 as cv
def process(image, opt=1):
# Detecting corners
gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
corners = cv.goodFeaturesToTrack(gray, 100, 0.05, 10)
print(len(corners))
for pt in corners:
print(pt)
b = np.random.random_integers(0, 256)
g = np.random.random_integers(0, 256)
r = np.random.random_integers(0, 256)
x = np.int32(pt[0][0])
y = np.int32(pt[0][1])
cv.circle(image, (x, y), 5, (int(b), int(g), int(r)), 2)
# output
return image
src = cv.imread("../images/box.bmp")
cv.imshow("input", src)
result = process(src)
cv.imshow('result', result)
cv.waitKey(0)
cv.destroyAllWindows()
实验结果
解释
Harris角点检测是一种计算速度很慢的角点检测算法,很难实时计算,所有最常用的是shi-tomas角点检测算法,它的运行速度很快。
OpenCV中相关API与解释如下:
corners = cv.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, useHarrisDetector[, k]]]]])
image
单通道输入图像,八位或者浮点数maxCorners
表示最大返回关键点数目qualityLevel
表示拒绝的关键点 R < qualityLevel × max response将会被直接丢弃minDistance
表示两个关键点之间的最短距离corners
是输出的关键点坐标集合mask
表示mask区域,如果有表明只对mask区域做计算blockSize
计算梯度与微分的窗口区域useHarrisDetector
表示是否使用harris角点检测,默认是false 为shi-tomask
= 0.04默认值,当useHarrisDetector为ture时候起作用
所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。