多语言展示
当前在线:1792今日阅读:168今日分享:49

python环境opencv用SIFT检测角点的方法

在角点检测过程中,有时会出现目标物体变大变小的情况,传统的shi-Tomasi 和Harris因为是的算法特点是角度不变性,也就是旋转对角点检测没什么影响。因此出现SIFT克服了shi-Tomasi 和Harris的不足。缩放也没影响,是检测局部特征的算法,具有尺度不变性
工具/原料
1

opencv3 python3

2

pycharm windows7

方法/步骤
1

SIFT作为尺度不变性的方法,克服了shi-Tomasi 和Harris的不足。在目标物体大小发生变化(缩放)或者旋转,亮度角度变化也能承受,这使得该算法有很大的应用范围。具体算法这里不讨论,它具有缩放不影响,简单说就是:通过求一幅图中的特征点等描述子得到特征并进行图像特征点匹配。图像进行旋转、平移、尺度缩放、仿射变换等,SIFT特征具有很好的稳定性。四个步骤:1检测尺度空间极值点、2精确定位极值点、3为每个关键点指定方向参数、4关键点描述子的生成。

2

import cv2  as cvimport  numpy as npimport copyimport osfrom matplotlib import pyplot as pltimage = cv.imread('c:\\color_MiLine_sfit.png')gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)对原图进行加载 然后转为灰度原图放了2个米匡图 边切进行缩放和90度旋转

3

通过xfeatures2d.SIFT_create()计算# 找到关键点 kpvalue siftpic = cv.xfeatures2d.SIFT_create()kpvalue = siftpic .detect(gray, None)

4

image  = cv.drawKeypoints(gray, kpvalue , image)cv.imshow('image', image)cv.waitKey(0)能够在大小2附图找到角点,而且比较接近kpvalue 为关键点列表

5

对本图采用 shi方法结果大不同,针对不同图 角点测试方法不同 结果不同image = cv.imread('c:\\color_MiLine_sfit.png)gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)corners = cv.goodFeaturesToTrack(gray,5,0.1,10)corners0 = np.int0(corners)for corner in corners0:    row, col = corner.ravel()   cv.circle(image, (row, col), 5, (255,255,0), 1)cv.imshow('image', image)cv.waitKey(0)

注意事项
1

可以看出SIFT比哈瑞斯 shi效果好

2

cv.xfeatures2d.SIFT_create()检测 此处没带参数

推荐信息