资源简介
使用SIFT或者SURF特征进行图像匹配,实现语言为python2.7+opencv3.1,代码有注释,有文档说明,并配有测试图像资源
代码片段和文件信息
# -*- coding:utf-8 -*- -
import cv2
import numpy as np
img1 = cv2.imread(‘1.bmp‘)
gray1= cv2.cvtColor(img1 cv2.COLOR_BGR2GRAY)
sift1 = cv2.xfeatures2d.SIFT_create()
#sift1 = cv2.xfeatures2d.SURF_create() #使用SURF
#kp1 关键点的坐标
#des1 每个关键点的特征向量(1 128)
kp1 des1 = sift1.detectAndCompute(gray1 None)
#img1 = cv2.drawKeypoints(gray1 kp1 img1)
img2 = cv2.imread(‘3.bmp‘)
gray2 = cv2.cvtColor(img2 cv2.COLOR_BGR2GRAY)
sift2 = cv2.xfeatures2d.SIFT_create()
#sift2 = cv2.xfeatures2d.SURF_create() #使用SURF
kp2 des2 = sift2.detectAndCompute(gray2None)
#img2 = cv2.drawKeypoints(gray2 kp2 img2)
def drawMatchesKnn_cv2(img1_gray kp1 img2_gray kp2 goodMatch):
h1 w1 = img1_gray.shape[:2]
h2 w2 = img2_gray.shape[:2]
vis = np.zeros((max(h1 h2) w1 + w2 3) np.uint8)
for i in xrange(3):
vis[:h1 :w1 i] = img1_gray
vis[:h2 w1:w1 + w2 i] = img2_gray
p1 = [kpp.queryIdx for kpp in goodMatch]
p2 = [kpp.trainIdx for kpp in goodMatch]
post1 = np.int32([kp1[pp].pt for pp in p1])
post2 = np.int32([kp2[pp].pt for pp in p2]) + (w1 0)
for (x1 y1) (x2 y2) in zip(post1 post2):
cv2.line(vis (x1 y1) (x2 y2) (0 0 255))
cv2.namedWindow(“match“ cv2.WINDOW_NORMAL)
cv2.imshow(“match“ vis)
# BFmatcher with default parms
bf = cv2.BFMatcher(cv2.NORM_L2)
# k:表示最近邻k个
# matches: 匹配的特征点,shape=(n k),n个匹配,每个匹配有k个可能的匹配特征点
# 每个匹配有k个DMatch元素,每个DMatch指示了原图像和目标图像的关键点序号
matches = bf.knnMatch(des1 des2 k=2)
print len(matches)
goodMatch = []
for m n in matches:
if m.distance < 0.50 * n.distance:
goodMatch.append(m)
drawMatchesKnn_cv2(gray1 kp1 gray2 kp2 goodMatch[:20])
cv2.waitKey(0)
cv2.destroyAllWindows()
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 280350 2018-01-11 21:26 hello\1.bmp
文件 70434 2018-06-02 10:05 hello\3.bmp
文件 1927 2018-06-02 19:13 hello\SIFT.py
目录 0 2018-06-02 19:13 hello
文件 243958 2018-06-02 18:46 SIFT+SURF+OPENCV实现.docx
----------- --------- ---------- ----- ----
596669 5
相关资源
- python总结
- boost.python 动态编译库
- 高斯投影正反算Python源码
- python xlutils
- Python3网络爬虫实战思维导图
- ros_arduino_python 调通版
- 数据挖掘十大算法源代码Python)
- XModem -发送端源代码Python语言实现
- pytracking/pytracking/evaluation/tracker.py
- Python爬取教务系统课程表
- 元胞自动机模拟交通道路_Python
- Python二级考试试题.zip
- python实现扫描线填充算法,可以画凹
- python3 包装的httpclient,支持session
- python日期时间运算
- python实现的ping工具
- Python简版聊天室代码
- Flask-login
- 矩阵分解在MovieLens上的Python实现
- 全国840个气象站点日照时数转日总太
- python 3.6 socket传输视频
- 基于PYQT编写的人脸识别软件
- 续Python3.x+PyQtChart实现数据可视化界面
- 疯狂Python讲义习题答案.rar
- A*算法解决十五数码问题Python程序、报
- 使用python tkinter写的登陆窗口源码
- caffe_pb2.py
- LUTAI.Tools.IronPythonCheckTool
- 基于python的猜单词游戏开发
- 基于Python实现的Pagerank算法
评论
共有 条评论