SURF算法python实现
-- 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实现相关推荐
- python opencv入门 SURF算法(34)
内容来自OpenCV-Python Tutorials 自己翻译整理 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要更快速的算 ...
- pythonopencv算法_python opencv之SURF算法示例
本文介绍了python opencv之SURF算法示例,分享给大家,具体如下: 目标: SURF算法基础 opencv总SURF算法的使用 原理: 上节课使用了SIFT算法,当时这种算法效率不高,需要 ...
- SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析
图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...
- 特征点检测学习_2(surf算法)
特征点检测学习_2(surf算法) 在上篇博客特征点检测学习_1(sift算法) 中简单介绍了经典的sift算法,sift算法比较稳定,检测到的特征点也比较多,其最大的确定是计算复杂度较高.后面有不少 ...
- Surf算法学习心得(一)——算法原理
Surf算法学习心得(一)--算法原理 写在前面的话: Surf算法是对Sift算法的一种改进,主要是在算法的执行效率上,比Sift算法来讲运行更快!由于我也是初学者,刚刚才开始研究这个算法,然而网上 ...
- 基于改进SURF算法的实时视频拼接
Journal of Image and Signal Processing Vol.04 No.04(2015), Article ID:16229,9 pages 10.12677/JISP.20 ...
- SURF算法与源码分析、下
FROM: http://www.cnblogs.com/ronny/p/4048213.html 上一篇文章 SURF算法与源码分析.上 中主要分析的是SURF特征点定位的算法原理与相关OpenCV ...
- SURF算法与源码分析、上
FROM:http://www.cnblogs.com/ronny/p/4045979.html 如果说SIFT算法中使用DOG对LOG进行了简化,提高了搜索特征点的速度,那么SURF算法则是对DoH ...
- 棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现
Dijkstra 最短路径算法 Python 实现 问题描述 使用 Dijkstra 算法求图中的任意顶点到其它顶点的最短路径(求出需要经过那些点以及最短距离). 以下图为例: 算法思想 可以使用二维 ...
- 2021-03-15 数据挖掘算法—K-Means算法 Python版本
数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...
最新文章
- [.NET] 《Effective C#》快速笔记 - C# 中的动态编程
- numpy向量转换为矩阵_干掉公式——numpy 就该这么学
- 上海python培训比较好的机构-上海Python培训机构推荐
- python基础代码库-Python基础数据处理库-NumPy
- 引领潮流云电视机遇与挑战并现
- python numpy np.finfo()函数 eps
- wireshark一招掌握如何过滤想要的数据再也不用查找天书般的说明文档
- 字符之间或者结构体之间比较
- DotNetCore跨平台~配置文件与配置代码如何共存
- 【Hadoop Summit Tokyo 2016】基于Apache Spark的数据科学
- 为全力发展AIOT,小米把松果电子分拆重组了
- php提前输出响应及注意问题
- ie下使用frameset布局导致跨域cookie丢失问题解决
- 未处理的异常: 0xC0000091: Floating-point overflow 的解决办法
- 深圳-上海-呼伦贝尔-漠河-哈尔滨环行手记
- 黄渤海浅层气的分布及特征综述
- 地形湿度指数(TWI)获取教程
- Linux Shell中的变量-环境变量
- Python爬取网易云音乐热歌排行榜Top200音乐
- 蚂蚁特工吱指南|用来吃的AR游戏机,奥利奥终于对自己下手了