OpenCV中的特征匹配+单应性以查找对象

  • 1. 效果图
  • 2. 源码
  • 参考

这篇博客将混合calib3d模块中的特征匹配和单应性,在复杂图像中查找已知对象。

1. 效果图

特征匹配 & 单应性查找对象效果图如下:

2. 源码

# 在图像中找到SIFT特征并应用比率测试来找到最佳匹配。import cv2
import numpy as np
from matplotlib import pyplot as pltMIN_MATCH_COUNT = 10img1 = cv2.imread('images/box.png', 0)  # 查询图像
img2 = cv2.imread('images/box_in_scene.png', 0)  # 训练图像# 初始化SIFT检测器
sift = cv2.xfeatures2d.SIFT_create()# 使用SIFT检测器寻找关键点和描述符
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)flann = cv2.FlannBasedMatcher(index_params, search_params)matches = flann.knnMatch(des1, des2, k=2)# 根据Lowe比率测试存储所有良好匹配项
good = []
for m, n in matches:if m.distance < 0.7 * n.distance:good.append(m)if len(good) > MIN_MATCH_COUNT:src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)dst_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)matchesMask = mask.ravel().tolist()h, w = img1.shapepts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)dst = cv2.perspectiveTransform(pts, M)img2 = cv2.polylines(img2, [np.int32(dst)], True, 255, 3, cv2.LINE_AA)
else:print("Not enough matches are found - %d/%d" % (len(good), MIN_MATCH_COUNT))matchesMask = None# 匹配点绘制为绿色,只绘制内置点
draw_params = dict(matchColor=(0, 255, 0),  # 绘制匹配点为绿色singlePointColor=None,matchesMask=matchesMask,  # 只绘制内置点flags=2)img3 = cv2.drawMatches(img1, kp1, img2, kp2, good, None, **draw_params)plt.imshow(img3, 'gray')
plt.xticks([])
plt.yticks([])
plt.title("feature_match & homography res")
plt.show()

参考

  • https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_feature_homography/py_feature_homography.html#py-feature-homography

OpenCV中的特征匹配+单应性以查找对象相关推荐

  1. OpenCV39:特征匹配+单应性矩阵查找对象

    目标 在本章中,将学习 将从Calib3D模块中混淆特征匹配和找到(单应性矩阵)homography,以查找复杂图像中的已知对象. 基础 在之前的内容中,使用了一个query image,在其中找到了 ...

  2. OpenCV系列之特征匹配+单应性查找对象 | 四十五

    目标 在本章节中, 我们将把calib3d模块中的特征匹配和findHomography混合在一起,以在复杂图像中找到已知对象 基础 那么我们在上一环节上做了什么?我们使用了queryImage,找到 ...

  3. 特征匹配 + 单应性查找对象

    在本章节中, - 我们将把calib3d模块中的特征匹配和findHomography混合在一起,以在复杂图像中找到已知对象. 上节中,我们使用了queryImage,找到了其中的一些特征点,我们使用 ...

  4. OpenCV SURF FLANN匹配单应性的实例(附完整代码)

    OpenCV SURF FLANN匹配单应性的实例 OpenCV SURF FLANN匹配单应性的实例 OpenCV SURF FLANN匹配单应性的实例 #include <iostream& ...

  5. OpenCV中的特征匹配(Feature Matching)

    OpenCV中的特征匹配(Feature Matching) 1. 效果图 2. 原理 3. 源码 3.1 SIFT关键点检测+Knn近邻匹配 3.2 ORB关键点检测+蛮力特征匹配 3.3 SIFT ...

  6. OpenCV相机位移引起的单应性的实例(附完整代码)

    OpenCV相机位移引起的单应性的实例 OpenCV相机位移引起的单应性的实例 OpenCV相机位移引起的单应性的实例 #include <iostream> #include <o ...

  7. OpenCV中的「透视变换 / 投影变换 / 单应性」—cv.warpPerspective、cv.findHomography

    文章目录 引言 透视变换(projective transform) 单应性(Homography) opencv代码 仿射变换相关函数 投影变换相关的函数 鸟瞰图代码示例 小结 引言 图像的几何变换 ...

  8. Homography matrix(单应性矩阵)在广告投放中的实践

    原文首发于微信公众号「3D视觉工坊」. 前言 由于近期在研究相机与投影仪的标定程序时,需要将结构光图片与灰点相机拍摄得到的图片中,找出角点之间的对应性,使用了如下一条代码: Mat HomoMatri ...

  9. 相机标定-opencv单应性矩阵实现平面坐标标定(kinect v1)

    opencv单应性矩阵实现平面坐标标定 说明 一.使用单应性矩阵的原因 二.标定原理 三.findHomography 函数与 getPerspectiveTransform函数的区别 1.两者联系 ...

最新文章

  1. 关于 fallocate 文件系统预分配 的一些细粒度测试
  2. Spring Cloud Zuul
  3. Python error: Unable to find vcvarsall.bat
  4. linux 启动mongodb
  5. 静态工厂方法与传统构造方法
  6. es6 依赖循环_require 和 import 的循环依赖详解
  7. Eclipse快捷键的使用
  8. 小鹏汽车回应“侵犯消费者权益被罚3000元”:已于3月8日对购车协议内容进行调整...
  9. 实验二 动态规划算法 最长公共子序列问题
  10. vdcode C语言不能弹出运行窗口_C语言编程常见问题分析,以及错误解决办法!
  11. 坏道与硬盘的P表和G表
  12. 计算机职业素养论文1500字,【如何提高职业素养1500字】_个人职业素养提升计划1500字范文...
  13. his软件测试文档,HIS系统各子系统功能描述
  14. laravel 框架使用hdjs 实现多图上传功能
  15. 张小平,海底捞,比特大陆
  16. (七)DAC0832 数模转换芯片的应用 以及运算放大器的学习 01
  17. ReactNative出现诸如以上的错误; ** is not defined.都是没有导入相应的库.
  18. 数据集大小与模型性能的敏感性分析
  19. instagram封号的原因解析
  20. java FFMPEG调取usb摄像头,截取视频,添加文字和时间水印

热门文章

  1. 自动驾驶行业内时间表和技术解析
  2. [JAVA EE] Filter过滤器
  3. HarmonyOS 修改App的默认加载的界面
  4. java.lang.IllegalArgumentException: No view found for id 0x7f07005f (xx) for for fragment xxFragment
  5. android 白天和夜间模式切换时闪屏问题处理方法
  6. Android 实现一个验证码倒计时(Handler postDelayed 实现验证码倒计时)
  7. Error:Unsupported method: BaseConfig.getApplicationIdSuffix(). The version o
  8. RxPermissions的简单应用
  9. Springboot在IDEA热部署的配置方法
  10. 2022-2028年中国智能眼镜行业深度调研及投资前景预测报告