SIFT:(注意,现仅个别opencv版本支持开源免费的SIFT、SURF算法函数,如3.4.2)
import cv2
import numpy as np
img = cv2.imread('xxx.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)
返回的关键点是一个带有很多不用属性的特殊结构体,属性当中有坐标,方向、角度等等。
计算关键点描述符:
使用sift.compute()函数来进行计算关键点描述符
kp,des = sift.compute(gray,kp)
如果未找到关键点,可使用函数sift.detectAndCompute()直接找到关键点并计算。
在第二个函数中,kp为关键点列表,des为numpy的数组,为关键点数目×128
sift = cv2.xfeatures2d.SIFT_create()
kp, des = sift.detectAndCompute(gray,None)
MSER:
import cv2
img = cv2.imread('xxx.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
mser = cv2.MSER_create()
regions, boxes = mser.detectRegions(gray)
for box in boxes:
x, y, w, h = box
cv2.rectangle(img, (x,y),(x+w, y+h), (255, 0, 0), 2)
cv2.imshow('sp',img)
cv2.waitKey(0)