首页 > 其他分享 >opencv模板匹配

opencv模板匹配

时间:2023-05-17 18:34:38浏览次数:34  
标签:匹配 img matches descriptors cv2 keypoints opencv 模板

opencv模板匹配    

  1. 读取图像并转换为灰度图像。

 
import cv2  
  
# 读取图像  
img = cv2.imread('template.jpg')  
  
# 转换为灰度图像  
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

 

  1. 检测关键点并绘制矩形框。

 
# 使用SIFT算法检测关键点  
sift = cv2.SIFT_create()  
keypoints, descriptors = sift.detectAndCompute(gray, None)  
  
# 绘制关键点矩形框  
img_with_keypoints = cv2.drawKeypoints(gray, keypoints, None)
  1. 计算描述符。

 
# 计算描述符  
keypoints_descriptors = []  
  
# 遍历所有关键点  
for kp in keypoints:  
    # 计算描述符  
    keypoints_descriptors.append(kp.pt)  
  
# 将描述符保存到列表中  
descriptors = keypoints_descriptors

 

  1. 匹配描述符。

 
# 使用FLANN匹配器进行匹配  
matches = cv2.FlannBasedMatcher()  
  
# 匹配描述符  
matches = matches.knnMatch(descriptors, descriptors, k=2)  
  
# 将匹配结果按照距离进行排序  
matches = sorted(matches, key=lambda x: x.distance)  
  
# 绘制匹配结果矩形框  
img_matches = cv2.drawMatches(img, keypoints, matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

 

  1. 显示结果图像。

 
# 显示结果图像  
cv2.imshow('Matches', img_matches)  
cv2.waitKey(0)

 

  以上是使用OpenCV库实现模板匹配的基本步骤,其中,cv2.SIFT_create()函数用于创建SIFT算法实例,cv2.drawKeypoints()函数用于绘制关键点矩形框,cv2.FlannBasedMatcher()函数用于使用FLANN匹配器进行匹配,cv2.drawMatches()函数用于绘制匹配结果矩形框,cv2.imshow()函数用于显示结果图像。在实际应用中,可以根据具体的需求和数据特征,调整SIFT算法实例的参数和关键点的检测方法,以获得更好的匹配效果。       ##################

标签:匹配,img,matches,descriptors,cv2,keypoints,opencv,模板
From: https://www.cnblogs.com/herd/p/17350396.html

相关文章

  • Mac 配置 OpenCV C++ 版本
    今天紀錄一下如何在Mac上安裝OpenCVforC++開發環境使用Brew安装,pkgconfig检测,2023.5.17Macx86(Intel),MacM1(Applesilicon)和Ubuntu也適用此筆記用OpenCV4.7.0_4版本做範例1.安装cmake与pkg-config如果您的 Mac 沒有cmake,pkg-config請先......
  • 【BZOJ4241】【回滚莫队模板题】历史研究
    Description给定一个序列,每次询问区间[l,r][l,r]内,所有权值与其出现次数的乘积的最大值。Solution回滚莫队模板题。将询问以左端点所在块为第一关键字,右端点为第......
  • opencvsharp surf 图像拼接
    代码如下:1Matsrc1=Cv2.ImRead(@"C:\Users\sa\Pictures\SavedPictures\3.png");2Matsrc2=Cv2.ImRead(@"C:\Users\sa\Pictures\SavedPictures\4.png");3Cv2.ImShow("src1",src1);......
  • js正则匹配及格式化日期案例
    正则匹配基础正则表达式它是js内置的一个对象,它的构造函数是RegExp,可以通过构造函数或者字面量这两种方式创建正则表达式.正则表达式的两个方法test()方法,用于验证某个字符串是否符合这个正则表达式规则;exec()方法,用于根据正则表达式去字符串中提取符合要求的字符;正则......
  • 企业级项目模板的配置与集成(Vite + Vue3 + TypeScript)
    企业级项目模板的配置与集成(Vite+Vue3+TypeScript)1、项目介绍项目使用:eslint+stylelint+prettier来对我们代码质量做检测和修复。需要使用husky来做commit拦截需要使用commitlint来统一提交规范需要使用preinstall来统一包管理工具。2、环境准备nodev16.14.2pnp......
  • Django authenticate() 函数查找不到与提交的用户名和密码匹配的用户,则会返回 None。
    在你的userAPP下面添加一个utils.py文件classUsernameMobileBackend(ModelBackend):defauthenticate(self,request,username=None,password=None,**kwargs):"""重写人做方法"""#使用账号查询运河#如果用户名查询到用......
  • linux 中 sed命令实现仅保留匹配字段的内容
     001、[root@PC1test4]#lsa.txt[root@PC1test4]#cata.txt##测试数据gbkey=mRNA;gene=ATP5O;model;evidence;Supporting[root@PC1test4]#sed's/\(.*\)\(gene=[^;]\+\)\(.*\)/\2/'a.txt##利用正则和预存储实现gene=ATP5O  002、[root@......
  • P3919 【模板】可持久化线段树 1(可持久化数组) 题解
    一、题目描述:维护这样的一个长度为$n$的数组,支持以下两种操作$1$:在某个历史版本上修改某一个位置上的值$2$:访问某个历史版本上的某一位置的值每进行一次操作,就会生成一个新的版本(对于操作2,生成的就是一个完全一样的版本)。版本编号即为当前操作......
  • 离散化模板
    https://www.acwing.com/problem/content/description/804/#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>#include<vector>usingnamespacestd;typedefpair<int,int>PII;constintN=300010;/......
  • VSCode版本和离线插件不匹配的解决方式
    相信很多人都遇到过这种情况,在内网环境使用VSCode进行开发时,无法在线下载插件,然而没有插件的话使用起来就很不方便,于是我们就需要离线下载插件然后离线安装,但是这又出现一个问题,下载的插件和vscode的版本常常不兼容,那么我们该如何准确找到vscode对应版本的插件呢?一、查看vscode的......