使用SIFT算法和SURF算法来提取和检测特征(python语言实现)

SIFT算法是一种与图像比例无关的角点检测算法。

该函数会对不同的图像尺度(尺度不变特征变换)输出相同的结果。

而SURF算法吸收了SIFT算法的思想,速度比SIFT快好几倍。

下面我会将两个算法整合在一个程序中:

import cv2
import numpy as np


img = cv2.imread('varese.jpg')#读取要处理的图片
alg = input('Select an Alg --> ')


def fd(algorithm):
	if algorithm == 'SIFT':
		return cv2.xfeatures2d.SIFT_create()
	if algorithm == 'SURF':
		threshold = input('Enter a threshold --> ')#提示输入SURF算法所采用的阈值
		return cv2.xfeatures2d.SURF_create(float(threshold))


gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#转换为灰度图像
fd_alg = fd(alg)
keypoints,descriptor = fd_alg.detectAndCompute(gray,None)#进行算法的检测和计算


img = cv2.drawKeypoints(image = img,outImage = img,keypoints = keypoints,
						flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS,
						color = (51,163,236))
cv2.imshow('keypoints',img)
while(True): 
	if cv2.waitKey(30) & 0xff == ord('q'):
		break
cv2.destroyAllWindows()

注意:本次程序中使用了input函数,本人在使用命令行运行该程序时出现报错,而使用默认的sublime运行时是无法进行输入交互的。因此可以通过下载sublimeREPL插件来解决这个问题。

安装插件方法请参考:点击打开链接 

原图像:


SIFT处理后:


SURF处理后:


本次SURF处理使用的阈值为8000,阈值越高,能识别的特征就越少。

自己可以采用试探法来得到最优的检测。


我本人也是正在学习opencv,本篇文章仅作为自己学习过程的记录。

如有错漏,请大牛们帮忙指出。一起探讨学习!

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值