A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wuqiong 于 2018-7-25 11:00 编辑

内容来自OpenCV-Python Tutorials 自己翻译整理


目标:

Shi-Tomasi 角点检测方法

函数cv2.goodFeatureToTrack()


原理:

在harris角点检测的方法中,对角点判断的打分公式为

R=λ1λ2−k(λ1+λ2)2R=λ1λ2−k(λ1+λ2)2

(λλ的含义见此http://blog.csdn.net/tengfei461807914/article/details/78009887


但是在Shi-Tomasi 角点检测的打分函数为:


R=min(λ1,λ2)R=min(λ1,λ2)

如果打分超过阈值,就判断为一个角点。如图

上图当中,

λ1λ1λ2λ2都大于设定的阈值时,判断为角点。(绿色部分)

代码:

cv2.goodFeaturesToTrack()此函数可以获得图像当中最好的N个角点。


参数

cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, useHarrisDetector[, k]]]]]) → corners


image 输入的灰度图像

maxCorners 要检测到的最大角点数量

qualityLevel 角点质量,值在0到1之间,低于此值的角点会被略掉。

minDistance 两个角点之间的最小距离,使用欧几里得距离

blocksize 可选,计算每个像素相邻矩阵导数时的平均块大小

mask 可选参数,表示角点的检测区域

k 可选,使用harris角点检测的自由参数

结果返回角点向量


将获得到的角点按照角点“质量”降序排列。将质量最高的角点排在第一位,然后过滤掉它周围minDistance之内的角点。以此类推

代码很简单

import numpy as np

import cv2

from matplotlib import pyplot as plt



img = cv2.imread('2.jpg')

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)


corners = cv2.goodFeaturesToTrack(gray,72,0.01,10)#棋盘上的所有点


corners = np.int0(corners)


for i in corners:

    x,y = i.ravel()

    cv2.circle(img,(x,y),10,255,-1)#在原图像上画出角点位置



cv2.imshow('p',img)

cv2.waitKey(0)


#plt.imshow(img)

#plt.show()

结果如下

此函数最目标追踪上非常有用!


5 个回复

倒序浏览
奈斯,优秀
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马