-- coding: utf-8 --

‘’’
SURF算法
‘’’
import cv2
import numpy as np

‘’‘1、加载图片’’’
img1 = cv2.imread(’./pic/logo1.jpg’,cv2.IMREAD_GRAYSCALE)
img1 = cv2.resize(img1,dsize=(600,400))
img2 = cv2.imread(’./pic/logo2.jpg’,cv2.IMREAD_GRAYSCALE)
img2 = cv2.resize(img2,dsize=(600,400))
image1 = img1.copy()
image2 = img2.copy()

‘’‘2、提取特征点’’’
#创建一个SURF对象
surf = cv2.xfeatures2d.SURF_create(25000)
#SIFT对象会使用Hessian算法检测关键点,并且对每个关键点周围的区域计算特征向量。该函数返回关键点的信息和描述符
keypoints1,descriptor1 = surf.detectAndCompute(image1,None)
keypoints2,descriptor2 = surf.detectAndCompute(image2,None)
print(‘descriptor1:’,descriptor1.shape,‘descriptor2’,descriptor2.shape)
#在图像上绘制关键点
image1 = cv2.drawKeypoints(image=image1,keypoints = keypoints1,outImage=image1,color=(255,0,255),flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
image2 = cv2.drawKeypoints(image=image2,keypoints = keypoints2,outImage=image2,color=(255,0,255),flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
#显示图像
cv2.imshow(‘surf_keypoints1’,image1)
cv2.imshow(‘surf_keypoints2’,image2)
cv2.waitKey(20)

‘’‘3、特征点匹配’’’
matcher = cv2.FlannBasedMatcher()
matchePoints = matcher.match(descriptor1,descriptor2)
print(type(matchePoints),len(matchePoints),matchePoints[0])

#提取强匹配特征点
minMatch = 1
maxMatch = 0
for i in range(len(matchePoints)):
if minMatch > matchePoints[i].distance:
minMatch = matchePoints[i].distance
if maxMatch < matchePoints[i].distance:
maxMatch = matchePoints[i].distance
print(‘最佳匹配值是:’,minMatch)
print(‘最差匹配值是:’,maxMatch)

#获取排雷在前边的几个最优匹配结果
goodMatchePoints = []
for i in range(len(matchePoints)):
if matchePoints[i].distance < minMatch + (maxMatch-minMatch)/16:
goodMatchePoints.append(matchePoints[i])

#绘制最优匹配点
outImg = None
outImg = cv2.drawMatches(img1,keypoints1,img2,keypoints2,goodMatchePoints,outImg,matchColor=(0,255,0),flags=cv2.DRAW_MATCHES_FLAGS_DEFAULT)
cv2.imshow(‘matche’,outImg)
cv2.waitKey(0)
cv2.destroyAllWindows()


SURF算法python实现相关推荐

  1. python opencv入门 SURF算法(34)

    内容来自OpenCV-Python Tutorials 自己翻译整理 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要更快速的算 ...

  2. pythonopencv算法_python opencv之SURF算法示例

    本文介绍了python opencv之SURF算法示例,分享给大家,具体如下: 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要 ...

  3. SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析

    图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...

  4. 特征点检测学习_2(surf算法)

    特征点检测学习_2(surf算法) 在上篇博客特征点检测学习_1(sift算法) 中简单介绍了经典的sift算法,sift算法比较稳定,检测到的特征点也比较多,其最大的确定是计算复杂度较高.后面有不少 ...

  5. Surf算法学习心得(一)——算法原理

    Surf算法学习心得(一)--算法原理 写在前面的话: Surf算法是对Sift算法的一种改进,主要是在算法的执行效率上,比Sift算法来讲运行更快!由于我也是初学者,刚刚才开始研究这个算法,然而网上 ...

  6. 基于改进SURF算法的实时视频拼接

    Journal of Image and Signal Processing Vol.04 No.04(2015), Article ID:16229,9 pages 10.12677/JISP.20 ...

  7. SURF算法与源码分析、下

    FROM: http://www.cnblogs.com/ronny/p/4048213.html 上一篇文章 SURF算法与源码分析.上 中主要分析的是SURF特征点定位的算法原理与相关OpenCV ...

  8. SURF算法与源码分析、上

    FROM:http://www.cnblogs.com/ronny/p/4045979.html 如果说SIFT算法中使用DOG对LOG进行了简化,提高了搜索特征点的速度,那么SURF算法则是对DoH ...

  9. 棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现

    Dijkstra 最短路径算法 Python 实现 问题描述 使用 Dijkstra 算法求图中的任意顶点到其它顶点的最短路径(求出需要经过那些点以及最短距离). 以下图为例: 算法思想 可以使用二维 ...

  10. 2021-03-15 数据挖掘算法—K-Means算法 Python版本

    数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...

最新文章

  1. [.NET] 《Effective C#》快速笔记 - C# 中的动态编程
  2. numpy向量转换为矩阵_干掉公式——numpy 就该这么学
  3. 上海python培训比较好的机构-上海Python培训机构推荐
  4. python基础代码库-Python基础数据处理库-NumPy
  5. 引领潮流云电视机遇与挑战并现
  6. python numpy np.finfo()函数 eps
  7. wireshark一招掌握如何过滤想要的数据再也不用查找天书般的说明文档
  8. 字符之间或者结构体之间比较
  9. DotNetCore跨平台~配置文件与配置代码如何共存
  10. 【Hadoop Summit Tokyo 2016】基于Apache Spark的数据科学
  11. 为全力发展AIOT,小米把松果电子分拆重组了
  12. php提前输出响应及注意问题
  13. ie下使用frameset布局导致跨域cookie丢失问题解决
  14. 未处理的异常: 0xC0000091: Floating-point overflow 的解决办法
  15. 深圳-上海-呼伦贝尔-漠河-哈尔滨环行手记
  16. 黄渤海浅层气的分布及特征综述
  17. 地形湿度指数(TWI)获取教程
  18. Linux Shell中的变量-环境变量
  19. Python爬取网易云音乐热歌排行榜Top200音乐
  20. 蚂蚁特工吱指南|用来吃的AR游戏机,奥利奥终于对自己下手了

热门文章

  1. 部署在IIS上的网站程序以管理员权限运行 设置方法
  2. DNS与NS、NS记录
  3. linux 命令:zip 详解
  4. GAN网络-简单明了
  5. 在Realview MDK中添加自己的FLASH编程算法
  6. rk3399调试ov2659(camera模块@dvp接口)--移植过程
  7. 微信小程序轮播图实现(超简单)
  8. Java远程连接数据库——远程连接MySQL数据库,操作和管理MySQL数据库
  9. EEGLAB 脑电数据处理与分析
  10. JCMsuite应用:闪耀光栅