opencv 图像查找

编程入门 行业动态 更新时间:2024-10-10 11:22:16

opencv <a href=https://www.elefans.com/category/jswz/34/1771430.html style=图像查找"/>

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 图像查找

本文发布于:2024-03-13 07:25:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1733458.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图像   opencv

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!