opencv3 python3
pycharm windows7
SIFT作为尺度不变性的方法,克服了shi-Tomasi 和Harris的不足。在目标物体大小发生变化(缩放)或者旋转,亮度角度变化也能承受,这使得该算法有很大的应用范围。具体算法这里不讨论,它具有缩放不影响,简单说就是:通过求一幅图中的特征点等描述子得到特征并进行图像特征点匹配。图像进行旋转、平移、尺度缩放、仿射变换等,SIFT特征具有很好的稳定性。四个步骤:1检测尺度空间极值点、2精确定位极值点、3为每个关键点指定方向参数、4关键点描述子的生成。
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度旋转
通过xfeatures2d.SIFT_create()计算# 找到关键点 kpvalue siftpic = cv.xfeatures2d.SIFT_create()kpvalue = siftpic .detect(gray, None)
image = cv.drawKeypoints(gray, kpvalue , image)cv.imshow('image', image)cv.waitKey(0)能够在大小2附图找到角点,而且比较接近kpvalue 为关键点列表
对本图采用 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)
可以看出SIFT比哈瑞斯 shi效果好
cv.xfeatures2d.SIFT_create()检测 此处没带参数