基于OpenCV的Sift特征匹配(在drawMatchesKnn函数无法调用的情况下)
来源:互联网 发布:域名如何过户 编辑:程序博客网 时间:2024/05/01 00:04
本实验基于opencv内置sift算子来对相似图像进行特征匹配。而在图像匹配显示中,由于莫名原因 “drawMatchesKnn” 函数无法直接调用。于是后面的图像显示部分是根据自己理解实现的。而在这个过程中也对匹配器中的匹配器对象(DMatch)多了一些了解。
DMatch对象具有下列属性:DMatch.distance 描述符之间的距离;DMatch.queryIdx 主影像的描述符索引;DMatch.trainIdx 第二影像的描述符索引;DMatch.imgIdx 目标影像的索引,也就是当有多个辅影像时的编号。而kp1和kp2是主影像和辅影像的关键点列表,存储了关键点的坐标信息(pt)。了解了这一层关系,我们就可以顺利地索引到关键点点坐标,从而画出特征匹配的情况。此外,我们还需要将原来分开的两张影像进行拼接处理,以便显示,在本代码中,拼接方法通过自定义函数“appendimages”实现。下面贴出完整代码。
import cv2from pylab import *img1=cv2.imread('ukbench00641.jpg',0)img2=cv2.imread('ukbench00642.jpg',0)m_h,n_l=img1.shapesift=cv2.SIFT()kp1,des1=sift.detectAndCompute(img1,None)kp2,des2=sift.detectAndCompute(img2,None)bf=cv2.BFMatcher()matches=bf.knnMatch(des1,des2,k=2)good=[]for m,n in matches: if m.distance<0.75*n.distance: good.append([m])def appendimages(I,I1): rows=I.shape[0] rows_1=I1.shape[0] if rows<rows_1: I=concatenate((I,zeros((rows_1-rows,I.shape(1)))),axis=0) elif rows>rows_1: I1=concatenate((I1,zeros((rows-rows_1,I1.shape(0)))),axis=0) return concatenate((I,I1),axis=1)I_12=appendimages(img1,img2)c_coord1=[]c_coord2=[]c_coord1_1=[]c_coord2_1=[]#for i in range(len(good)):for i in range(40): c_coord1.append(kp1[good[i][0].queryIdx].pt[0]) c_coord2.append(kp1[good[i][0].queryIdx].pt[1]) c_coord1_1.append(kp2[good[i][0].trainIdx].pt[0]) c_coord2_1.append(kp2[good[i][0].trainIdx].pt[1])c_coord1_1_1=[k+n_l for k in c_coord1_1]imshow(I_12,cmap='gray')plot(c_coord1,c_coord2,'r*')plot(c_coord1_1_1,c_coord2_1,'bo')X=[c_coord1[:],c_coord1_1_1[:]]Y=[c_coord2[:],c_coord2_1[:]]plot(X,Y)show()下面是结果展示,可以看到sift算子较harris算子来看,虽然也存在错误匹配点,但是效果明显好很多。
0 0
- 基于OpenCV的Sift特征匹配(在drawMatchesKnn函数无法调用的情况下)
- 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- 9.4 【OpenCV】 基于 ransac 算法的 sift 特征匹配程序(开发环境为OpenCV2.3.1+VS2010)
- OpenCV SIFT特征学习 (三) 特征如何更好的匹配(上)
- 使用RANSAC提纯SIFT和SURF特征点,达到鲁棒匹配的效果(OpenCV 2.4.13下,源码)
- OpenCV学习笔记(四):OpenCV SIFT特征的检测与匹配 测试
- opencv-计算图像的SIFT特征及匹配
- SIFT特征2-基于OpenCV和C++的算法实现
- OpenCV-基于特征点的图像匹配
- 基于OpenCV的简单图片特征匹配
- 基于opencv的特征点匹配法
- OpenCV SIFT特征学习:(二)SIFT匹配
- 特征点匹配方法(SIFT匹配)的一点见解
- 特征点匹配方法(SIFT匹配)的一点见解
- 基于Opencv的SIFT代码,使用FLANN匹配
- opencv sift特征及匹配
- ++i+++i+++i的问题的一点思考
- python相关面试题
- 用Java写出优雅的单例模式
- POJ1056 Runtime Error
- java爬虫(一)
- 基于OpenCV的Sift特征匹配(在drawMatchesKnn函数无法调用的情况下)
- Spring boot项目在docker下的部署,发布
- hfile
- FastDFS配置文件详解
- 深入理解LDA和pLSA
- 深入分析java线程池的实现原理
- 世界人口地图——地图
- ZSTU-4272-最佳淘汰算法【优先队列】
- 强化学习 Reinforcement Learning 资料