sift特征匹配Python代码

目录

1.安装opencv-contrib-python

2.sift关键点检测

3.sift特征匹配


1.安装opencv-contrib-python

首先要安装opencv-contrib-python,否则会提示如下错误:

Traceback (most recent call last):
File "sift.py", line 7, in <module>
sift = cv2.xfeatures2d.SIFT_create()
AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'

安装时要注意,opencv-contrib-python的3.4.2及以下版本是包含sift的,3.4.3及以上版本不包含sift,我这里安装的是opencv-contrib-python的3.4.2.17版本,

安装命令如下

#卸载opencv-python
pip uninstall opencv-python    
#安装opencv-contrib-python
pip install opencv-contrib-python==3.4.2.17

2.sift关键点检测

代码如下:

#coding = utf8
import cv2
import numpy as np

img = cv2.imread('./0.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()

kp = sift.detect(gray, None)  
 
img = cv2.drawKeypoints(gray, kp, img)  

#cv2.imshow('sp', img)
#cv2.waitKey(0)

cv2.imwrite("./result.jpg", img)

原图和结果图如下:

        

3.sift特征匹配

import io
from PIL import Image, ImageTk
import tkinter as tk

import cv2
import numpy as np
MIN_MATCH_COUNT = 4
 
img1 = cv2.imread("./ai0.jpeg")
img2 = cv2.imread("./ai1.jpeg")
g1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
g2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
match = cv2.FlannBasedMatcher(dict(algorithm =2, trees =1), {})
kp1, de1 = sift.detectAndCompute(g1,None)
kp2, de2 = sift.detectAndCompute(g2,None)
m = match.knnMatch(de1, de2, 2)
m = sorted(m,key = lambda x:x[0].distance)
ok = [m1 for (m1, m2) in m if m1.distance < 0.7 * m2.distance]
med = cv2.drawMatches(img1, kp1, img2, kp2, ok, None)
 
cv2.imwrite("./match.jpg", med)

原图如下:

扫描二维码关注公众号,回复: 12892787 查看本文章

    

结果如下:

参考文献:https://www.cnblogs.com/wenbozhu/p/10548794.html

猜你喜欢

转载自blog.csdn.net/u013171226/article/details/114396354