opencv-python 提取sift特征并匹配的实例
作者:Yan456jie 发布时间:2022-01-25 03:43:18
标签:opencv,python,sift,匹配
我就废话不多说,直接上代码吧!
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from find_obj import filter_matches,explore_match
from matplotlib import pyplot as plt
def getSift():
'''
得到并查看sift特征
'''
img_path1 = '../../data/home.jpg'
#读取图像
img = cv2.imread(img_path1)
#转换为灰度图
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#创建sift的类
sift = cv2.SIFT()
#在图像中找到关键点 也可以一步计算#kp, des = sift.detectAndCompute
kp = sift.detect(gray,None)
print type(kp),type(kp[0])
#Keypoint数据类型分析 http://www.cnblogs.com/cj695/p/4041399.html
print kp[0].pt
#计算每个点的sift
des = sift.compute(gray,kp)
print type(kp),type(des)
#des[0]为关键点的list,des[1]为特征向量的矩阵
print type(des[0]), type(des[1])
print des[0],des[1]
#可以看出共有885个sift特征,每个特征为128维
print des[1].shape
#在灰度图中画出这些点
img=cv2.drawKeypoints(gray,kp)
#cv2.imwrite('sift_keypoints.jpg',img)
plt.imshow(img),plt.show()
def matchSift():
'''
匹配sift特征
'''
img1 = cv2.imread('../../data/box.png', 0) # queryImage
img2 = cv2.imread('../../data/box_in_scene.png', 0) # trainImage
sift = cv2.SIFT()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# 蛮力匹配算法,有两个参数,距离度量(L2(default),L1),是否交叉匹配(默认false)
bf = cv2.BFMatcher()
#返回k个最佳匹配
matches = bf.knnMatch(des1, des2, k=2)
# cv2.drawMatchesKnn expects list of lists as matches.
#opencv2.4.13没有drawMatchesKnn函数,需要将opencv2.4.13\sources\samples\python2下的common.py和find_obj文件放入当前目录,并导入
p1, p2, kp_pairs = filter_matches(kp1, kp2, matches)
explore_match('find_obj', img1, img2, kp_pairs) # cv2 shows image
cv2.waitKey()
cv2.destroyAllWindows()
def matchSift3():
'''
匹配sift特征
'''
img1 = cv2.imread('../../data/box.png', 0) # queryImage
img2 = cv2.imread('../../data/box_in_scene.png', 0) # trainImage
sift = cv2.SIFT()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# 蛮力匹配算法,有两个参数,距离度量(L2(default),L1),是否交叉匹配(默认false)
bf = cv2.BFMatcher()
#返回k个最佳匹配
matches = bf.knnMatch(des1, des2, k=2)
# cv2.drawMatchesKnn expects list of lists as matches.
#opencv3.0有drawMatchesKnn函数
# Apply ratio test
# 比值测试,首先获取与A 距离最近的点B(最近)和C(次近),只有当B/C
# 小于阈值时(0.75)才被认为是匹配,因为假设匹配是一一对应的,真正的匹配的理想距离为0
good = []
for m, n in matches:
if m.distance < 0.75 * n.distance:
good.append([m])
img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, good[:10], None, flags=2)
cv2.drawm
plt.imshow(img3), plt.show()
matchSift()
来源:https://blog.csdn.net/Yan456jie/article/details/52312253
0
投稿
猜你喜欢
- 1. 需要的库, redispip install redis2. 连接Redisimport redisclass RedisCtrl(o
- 当使用for语句循环(迭代)pandas.DataFrame时,简单的使用for语句便可以取得返回列名,因此使用重复使用for方法,便可以获
- 引用自百度知道里面的一个问答例如数组{1,2,3,4,5}要把数组里面的3删除得到{1,2,4,5}js代码:<script type
- goroutine简介goroutine是go语言中最为NB的设计,也是其魅力所在,goroutine的本质是协程,是实现并行计算的核心。g
- 解决安装Office2003 SP2后不能打开Access的问题手动更改注册表要解决此问题, 手动更改计算机上注册表位置启动 Access
- 一.安装python进入python官网,点击依次点击红色选中部分,开始下载。。。下载完成后,打开安装包,如下有两个选项,一个是立即安装,另
- <body> <script> //关闭DIV MENU function MenuClose() { var Me
- 第一步:创建django项目打开终端,切换到期望所写项目的地址:cd python3_django_projects;输入命令:django
- 1. 引言当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等
- 使用正则库爬取淘宝商品的商品信息,首先我们需要确定想要爬取的对象我们在淘宝里搜索“python”,出来的结果从url连接中可以得到搜索商品的
- 前言最近实习任务为黑烟检测,想起了可以尝试用yolov5来跑下,之前一直都是用的RCNN系列,这次就试试yolo系列。一、安装pytorch
- SQL Server:Select TOP N * From TABLE Order By NewID() view
- 改变图像中物体对象(像素)之间的空间关系。平移# 定义平移矩阵,需要是numpy的float32类型# x轴平移50,y轴平移80, 2*3
- 下载依赖首先需要下载hadoop和spark,解压,然后设置环境变量。hadoop清华源下载spark清华源下载HADOOP_HOME =&
- 1.lower()将字符串中的大写字母转换成小写字母语法:str.lower()#举例:str1 = "LiBai is a bo
- 控制资源访问前文提到threading库在多线程时,对同一资源的访问容易导致破坏与丢失数据。为了保证安全的访问一个资源对象,我们需要创建锁。
- 一. ADO.NET的定义ADO.NET来源于COM组件库ADO(即ActiveX Data Objects),是微软公司新一代.NET数据
- 目前,在使用python处理一个nc文件绘制一个风场图时,出现了以下报错虽然图片画出来了,但是很丑而且没有理想的填充颜色!但是不知道为啥,但
- 本文实例讲述了python判断远程端口是否打开的方法。分享给大家供大家参考。具体实现方法如下:import socketsk = socke
- 1、DataFrame返回的不是对象。2、DataFrame查出来的数据返回的是一个dataframe数据集。3、DataFrame只有遇见