图像查找"/>
opencv 图像查找
图像查找用到的技术手段
- 特征匹配
- 单应性矩阵
利用单应性矩阵可以做哪些事?
import cv2 as cv
import numpy as np# 读取图片
img1 = cv.imread('1.png')
img2 = cv.imread('2.png')
# 灰度化
gray1 = cv.cvtColor(img1,cv.COLOR_BGR2GRAY)
gray2 = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)
# 创建sift特征匹配器
sift = cv.xfeatures2d.SIFT_create()
# 计算描述子与特征点
kp1, des1 = sift.detectAndCompute(gray1, None)
kp2, des2 = sift.detectAndCompute(gray2, None)
# 创建匹配器
index_params = dict(algorithm=1, trees=5)
search_params = dict(checks=50)
flann = cv.FlannBasedMatcher(index_params, search_params)
# 对描述子进行匹配
matches = flann.knnMatch(des1, des2, k=2)
good = []
for i, (m, n) in enumerate(matches):if m.distance < 0.7*n.distance:good.append(m)if len(good) >= 4:srcPoints = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)dstPoints = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)H, _ = cv.findHomography(srcPoints, dstPoints, cv.RANSAC, 5.0)h, w = img1.shape[:2]pts = np.float32([[0, 0], [0, h-1], [w-1, h-1], [w-1, 0]]).reshape(-1, 1, 2)dst = cv.perspectiveTransform(pts, H)cv.polylines(img2,[np.int32(dst)], True, (0,0,255))else:print('the number of good is less than 4')exit()
ret = cv.drawMatchesKnn(img1,kp1,img2,kp2,[good],None)
cv.imshow('ret', ret)
cv.waitKey(0)
更多推荐
opencv 图像查找
发布评论