资讯专栏INFORMATION COLUMN

opencv python Harris角点检测

宋华 / 606人阅读

摘要:角点角点所具有的特征轮廓之间的交点对于同一场景,即使视角发生变化,通常具备稳定性质的特征该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化角点检测基本原理使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况

Harris Corner Detection

角点

角点所具有的特征:

轮廓之间的交点

对于同一场景,即使视角发生变化,通常具备稳定性质的特征

该点附近区域的像素点无论在梯度方向上还是其梯度幅值上有着较大变化

角点检测基本原理

使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点.

OpenCV中的Harris角点检测器

cv2.cornerHarris(src, blockSize, ksize, k[, dst[, borderType]])

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

img = cv2.imread("img5.png")
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)

#result is dilated for marking the corners, not important
dst = cv2.dilate(dst,None)

# Threshold for an optimal value, it may vary depending on the image.
img[dst>0.01*dst.max()]=[0,0,255]

cv2.imshow("dst",img)
if cv2.waitKey(0) & 0xff == 27:
    cv2.destroyAllWindows()

亚像素级的角点

有时需要以最高精度找到角落,
cv2.cornerSubPix(image, corners, winSize, zeroZone, criteria)

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

img = cv2.imread("img5.png")
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# find Harris corners
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)
dst = cv2.dilate(dst,None)
ret, dst = cv2.threshold(dst,0.01*dst.max(),255,0)
dst = np.uint8(dst)

# find centroids
ret, labels, stats, centroids = cv2.connectedComponentsWithStats(dst)

# define the criteria to stop and refine the corners
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)
corners = cv2.cornerSubPix(gray,np.float32(centroids),(5,5),(-1,-1),criteria)

# Now draw them
res = np.hstack((centroids,corners))
res = np.int0(res)
img[res[:,1],res[:,0]]=[0,0,255]
img[res[:,3],res[:,2]] = [0,255,0]


cv2.imshow("dst",img)
if cv2.waitKey(0) & 0xff == 27:
    cv2.destroyAllWindows()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42068.html

相关文章

  • opencv python SIFT(尺度不变特征变换)

    摘要:理论前面讲的角点检测器中的角点在旋转的图像中也是角点,但是缩放呢如果缩放图像,则角可能不是角例如,检查下面的简单图像,当在同一窗口中放大时,小窗口内的小图像中的角是平坦的所以角点检测器不是尺度不变的所以,在年,不列颠哥伦比亚大学的在他的论 Introduction to SIFT (Scale-Invariant Feature Transform) 理论 前面讲的Harris角点检...

    marek 评论0 收藏0
  • opencv python Shi-Tomasi角点检测

    摘要:低于质量水平的所有角落都被拒绝,然后它根据质量按降序对剩余的角进行排序 Shi-Tomasi Corner Detector & Good Features to Track cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, useHa...

    red_bricks 评论0 收藏0
  • Programming Computer Vision with Python (学习笔记九)

    摘要:角检测还可以用在运动检测物体识别等方面。角检测角检测也叫角检测是目前可用的最简单的角检测算法。为使得计算更方便,角测量给出了去除系数的方法,只要计算或为一个很小的正的常量,我们暂且称此为方法。你还可以查看我的其它笔记参考资料 角检测(Corner detection)是指检测图像中具有代表性的(我们感兴趣的)角点,一般讲为形状或边缘的拐角处,这些点可以大略标记对象在图像中的轮廓和位置,...

    focusj 评论0 收藏0
  • Programming Computer Vision with Python (学习笔记十)

    摘要:如下图所示,左右是两张稍有不同的图片,但都包含了广州塔,左图红色框中标出了两个感兴趣的点,我期望找出它们在右图的对应位置即对应点。 现在考虑一个全景图拼接的应用场景,假设现有两张图片需要拼接成一张全景图,这两张图片是通过相机右转一定角度拍摄出来的,两张图片有部分取景是重叠的。如何实现拼接?当然这是一个不简单的问题,我们现在只考虑实现拼接目标的第一步:找出图像中重叠的内容,以及分别在两张...

    lunaticf 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<