Python OpenCV中的drawMatches()关键匹配绘制方法
作者:乔卿 发布时间:2022-10-31 22:36:57
标签:Python,OpenCV,drawMatches,关键,匹配,绘制
作用说明
该方法被用于绘制关键点的匹配情况。我们看到的许多匹配结果都是使用这一方法绘制的——一左一右两张图像,匹配的关键点之间用线条链接。
函数原型
cv.drawMatches(img1, keypoints1, img2, keypoints2, matches1to2, outImg[, matchColor[, singlePointColor[, matchesMask[, flags]]]]) -> outImg
cv.drawMatches(img1, keypoints1, img2, keypoints2, matches1to2, outImg, matchesThickness[, matchColor[, singlePointColor[, matchesMask[, flags]]]]) -> outImg
cv.drawMatchesKnn(img1, keypoints1, img2, keypoints2, matches1to2, outImg[, matchColor[, singlePointColor[, matchesMask[, flags]]]]) -> outImg
参数详解
img1:第一张原始图像。
keypoints1:第一张原始图像的关键点。
img2:第二张原始图像。
keypoints2:第二张原始图像的关键点。
matches1to2:从第一个图像到第二个图像的匹配,这意味着keypoints1[i]在keypoints2[Matches[i]中有一个对应的点。
outImg:绘制结果图像。
matchColor:匹配连线与关键点点的颜色,当
matchColor==Scalar::all(-1)
时,代表取随机颜色。singlePointColor:没有匹配项的关键点的颜色,当
singlePointColor==Scalar::all(-1)
时,代表取随机颜色。matchesMask:确定绘制哪些匹配项的掩码。如果掩码为空,则绘制所有匹配项。
flags:绘图功能的一些标志。具体有:
cv.DRAW_MATCHES_FLAGS_DEFAULT
cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS
cv.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG
cv.DRAW_MATCHES_FLAGS_NOT_DRAW_SINGLE_POINTS 代码实例
def bf_match(img_path1, img_path2):
# 读取两张图像
img1 = cv2.imread(img_path1, cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread(img_path2, cv2.IMREAD_GRAYSCALE)
# 计算两张图像的SIFT描述符
kp1, des1, _ = sift_algorithm(img_path1)
kp2, des2, _ = sift_algorithm(img_path2)
# 创建BFMatcher实例
bf = cv2.BFMatcher()
# 获得最佳匹配
matches = bf.match(des1, des2)
# 绘制匹配结果
# matches = sorted(matches, key = lambda x:x.distance)
match_result = cv2.drawMatches(img1, kp1, img2, kp2, matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
# 显示绘制结果
plt.imshow(match_result)
plt.show()
return match_result
结果
来源:https://qiaoxs.blog.csdn.net/article/details/124651286


猜你喜欢
- 本文采用os.walk()和os.listdir()两种方法,获取指定文件夹下的文件名。一、os.walk()模块os中的walk()函数可
- <%'asp事务处理。'测试数据库为sql server,服务器为本机,数据库名为test,表名为a,两个字段id(i
- 1.使用iloc对数据进行批量修改使用iloc最简单的就是将数据批量修改为某个特定的值以下是我随便写入的数据:现在将[‘
- 一.问题描述python 中使用open打开某个文件写入时,往往会发现需要写入的文件不在同级目录下。这样就需要根据文件的路径来找到并打开。但
- 最近,在搞这个东西,网上也找不到asp相关的,如果有人很早弄出来了,也不要笑话偶;费了好久,总算搞定;原理:用stream对象预读文件的头两
- 我就废话不多说了,大家还是直接看代码吧~import pandas as pdimport numpy as npcolumns = [[&
- 在PyCharm 里,显示行号有两种办法:1,临时设置。右键单击行号处,选择 Show Line Numbers。但是这种方法,只对一个文件
- 背景:数据库中逗号拼接的字符串,想展示其完整拼接名称或者按其值统计处理,怎么做?FIND_IN_SET函数和GROUP_CONCAT函数你会
- 目的:让在vuex中管理的状态数据同时存储在本地。可免去自己存储的环节。在开发的过程中,像用户信息(名字,头像,token)需要vuex中存
- 作为一个MySQL的系统管理员,你有责任维护你的MySQL数据库系统的数据安全性和完整性。本文主要主要介绍如何建立一个安全的MySQL系统,
- 本文实例讲述了Bootstrap简单实用的表单验证插件BootstrapValidator用法。分享给大家供大家参考,具体如下:Bootst
- 在腾讯云上面搭建的mysql使用开发的电脑上navicat进行访问时总是特别的慢,原来是Mysql会对请求的地址进行域名解析,开发的电脑并没
- 我使用Pytorch进行模型训练时发现真正模型本身对于显存的占用并不明显,但是对应的转换为tensorflow后(权重也进行了转换),发现P
- Django 中的时区在现实环境中,存在有多个时区。用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统。所以如果网站面
- 现在主流的cms或者blog等系统中,都内置的有插件系统,但是层层深入、剖析实现的方式,其实都是最简单的钩子的复杂化的实现。前言钩子是插件执
- urls.py:URL dispatcher(路由配置文件)URL配置(URLconf)就像是Django所支撑网站的目录。它的本质是URL
- 在 Web 编辑器领域,CKEditor – 七年的专注,赢取的是王者风范。TinyMCE – 五年前的小家碧玉,如今已成长为大家闺秀。Go
- 1 减少HTTP请求数量 (Minimize HTTP Requests) tag:content80%的用户响应时间被花费在前端
- python 网络编程详解网络编程的专利权应该属于Unix,各个平台(如windows、Linux等)、各门语言(C、C++、Python、
- SqlServer帮助中对扩展属性的描述是: The Extended Properties property sets or retrie