当前位置: 首页 > news >正文

测试OpenCvSharp库的模板匹配功能

  微信公众号“Dotnet讲堂”的文章《c#实现模板匹配,并输出匹配坐标》(参考文献1)中介绍了采用OpenCVSharp库实现模板匹配功能,也即在目标图片中定位指定图片内容的示例,本文参照参考文献1-4,学习并测试OpenCVSharp库的模板匹配功能.
  新建Winform项目,在NuGet管理器中添加OpenCVSharp包引用,由于参考文献1中并未说明OpenCVSharp库,最开始安装的下图中第一个包,但测试时并没有找到Cv2类,于是又重新安装了包OpenCvSharp4,此时NuGet包才安装正确。

在这里插入图片描述  根据参考文献2中的介绍,不同的操作系统需安装的包不同,主要分为以下几种情形。如果是引用程序集方式,则需在参考文献6中下载相应的dll文件。除此之外,OpenCvSharp不支持Unity和Xamarin平台,也不支持CUDA,详细说明见参考文献2。
  1)Windows (UWP除外,UWP的介绍见参考文献5):需安装包OpenCvSharp4和OpenCvSharp4.runtime.win,也可以单独安装包OpenCvSharp4.Windows,本文选择了前者;
  2)UWP:需安装包OpenCvSharp4和OpenCvSharp4.runtime.uwp;
  3)Ubuntu 20.04:需安装包OpenCvSharp4和OpenCvSharp4.runtime.ubuntu.20.04.x64。

  模板匹配功能主要使用以下类及方法:
  1)采用Mat类保存图片内容、匹配结果等信息;
  2)调用Cv2中的MatchTemplate函数计算源图形和目标图形的proximity map(Bing给出的翻译为临近图,但是百度搜索临近图没有找到多少有用内容),函数原型如下所示:

在这里插入图片描述
  3)调用Cv2中的MinMaxLoc函数返回MatchTemplate函数计算结果中的最大/最小值及对应位置,参考文献1中使用返回的最大值判断是否匹配成功,搞不懂原理,但感觉类似相似度的用法。函数原型如下:
在这里插入图片描述
  参考文献2中还提到,Mat等类中使用了非托管资源,需要手工调用Dispose函数释放资源,使用+,、-、*等操作符创建的对象也需要手工释放。对此有两种方式解决:
  1)创建对象时使用using标识对象需释放,即采用using var a =new Object类似的形式;
  2)OpenCvSharp库提供ResourcesTracker类,使用该类提供的创建函数新建的对象,在ResourcesTracker类对象实例释放时,会一起释放资源。特此将参考文献1中的示例代码修改为使用ResourcesTracker类的形式,代码如下所示:

	using (var t = new ResourcesTracker()){Mat srcImage = t.T(new Mat(picSrcImage.Tag.ToString(), ImreadModes.Color));Mat templateImage = t.T(new Mat(picDest.Tag.ToString(), ImreadModes.Color));Mat result = t.NewMat();Cv2.MatchTemplate(srcImage, templateImage, result, TemplateMatchModes.CCoeffNormed);double minVal = 0;double maxVal = 0;OpenCvSharp.Point minLoc = new OpenCvSharp.Point();OpenCvSharp.Point maxLoc = new OpenCvSharp.Point();Cv2.MinMaxLoc(result, out minVal, out maxVal, out minLoc, out maxLoc);if (maxVal > 0.8){Cv2.Rectangle(srcImage, maxLoc, new OpenCvSharp.Point(maxLoc.X + templateImage.Width, maxLoc.Y + templateImage.Height), Scalar.Red, 2);t.T(new Window("匹配结果", srcImage));Cv2.WaitKey();}}

  最后是测试程序运行效果,如下图所示:
在这里插入图片描述在这里插入图片描述
参考文献:
[1]https://blog.csdn.net/sD7O95O/article/details/132725989
[2]https://github.com/shimat/opencvsharp
[3]https://github.com/shimat/opencvsharp_samples/
[4]http://shimat.github.io/opencvsharp/api/OpenCvSharp.html
[5]https://baike.baidu.com/item/Universal%20Windows%20Platform/23796796?fromtitle=uwp&fromid=4236943&fr=aladdin
[6]https://github.com/shimat/opencvsharp/releases

相关文章:

测试OpenCvSharp库的模板匹配功能

微信公众号“Dotnet讲堂”的文章《c#实现模板匹配,并输出匹配坐标》(参考文献1)中介绍了采用OpenCVSharp库实现模板匹配功能,也即在目标图片中定位指定图片内容的示例,本文参照参考文献1-4,学习并测试OpenC…...

网络编程day04(网络属性函数、广播、组播、TCP并发)

今日任务 对于newfd的话,最好是另存然后传入给分支线程,避免父子线程操作同一个文件描述符 ------------在tcp多线程服务端---------- 如果使用全局变量,或者指针方式间接访问,会导致所有线程共用一份newfd和cin,那么…...

HALCON支持GPU加速的算子有哪些?

参考例程get_operator_info。 get_opencl_operators这里可以查看到所有支持gpu加速的算子。 支持的算子列表: crop_rectangle1,deviation_image,mean_image,points_harris,gray_opening_shape, gray_dilat…...

MacBook Pro 电池电量限制充电怎么设置AlDente Pro for Mac最大充电限制工具

通过充电电量限制工具可以更好的保护MacBook Pro的电池,通过 AlDente Pro 您可以设置电池的最大充电百分比设置为 20% 至 100%,然后,它将保持在所需的电池百分比,然后再次使用电源适配器进行充电。 AlDent…...

毕业设计选题之Java+springboot线上蔬菜销售与配送系统(源码+调试+开题+lw)

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...

【Leetcode】162.寻找峰值

一、题目 1、题目描述 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。 你可以假设 nums[-1] = nums[n] = -∞ 。 你必须实现时间复杂度为 O(log n…...

SpringBoot集成MinIO8.0

一、安装MinIO 中文官网地址&#xff1a;https://www.minio.org.cn/download.shtml 官网地址&#xff1a;https://min.io/download 官网有相应的安装命令&#xff0c;可查看 建议引用相应版本的依赖 二、集成SpringBoot 1.引入依赖 <dependency><groupId>io.…...

蓝桥等考Python组别五级007

第一部分:选择题 1、Python L5 (15分) 表达式“not a > 0”等价于下面哪个表达式?( ) a < 0a == 0a <= 0a in 0正确答案:C 2、Python L5 (15分) 执行下面的程序,当用键盘输入10时,输出结果是( )。 n &...

【装机】通过快捷键设置BIOS从U盘启动

当要重装系统的时候,是否会遇到一个问题,进入bios的时候就开始凌乱了,因为不懂得怎么用bios设置u盘启动.不要着急,下面来一波小白装机教程 总的来讲&#xff0c;设置电脑从U盘启动一共有两种方法&#xff1a; 第一种&#xff1a;开机时候按快捷键&#xff0c;然后选择U盘启动第…...

关于操作系统与内核科普

关于操作系统与内核科普 一.什么是操作系统 操作系统是管理计算机硬件与软件资源的计算机程序。它为计算机硬件和软件提供了一种中间层。 操作系统是一种软件&#xff0c;主要目的有三种&#xff1a; 一.管理计算机资源&#xff0c;这些资源包括CPU&#xff0c;内存&#xff0…...

算法练习3——删除有序数组中的重复项

LeetCode 26 删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums …...

《YOLOv5:从入门到实战》报错解决 专栏答疑

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。《YOLOv5&#xff1a;从入门到实战》专栏上线后&#xff0c;部分同学在学习过程中提出了一些问题&#xff0c;笔者相信这些问题其他同学也有可能遇到。为了让大家可以更好地学习本专栏内容&#xff0c;笔者特意推出了该篇专…...

[2023.09.25]:Rust编写基于web_sys的编辑器:输入光标再次定位的小结

前些天&#xff0c;写了探索Rust编写基于web_sys的WebAssembly编辑器&#xff1a;挑战输入光标定位的实践&#xff0c;经过后续的开发检验&#xff0c;我发现了一个问题&#xff0c;就是光标消失了。为了继续输入&#xff0c;用户需要再次使用鼠标点击。现在我已经弄清楚了导致…...

估计、偏差和方差

一、介绍 统计领域为我们提供了很多工具来实现机器学习目标&#xff0c;不仅可以解决训练集上的任务&#xff0c;还可以泛化。基本的概念&#xff0c;例如参数估计、偏差和方差&#xff0c;对于正式地刻画泛化、欠拟合和过拟合都非常有帮助。 二、参数估计 参数估计 是统计学…...

正态分布的概率密度函数|正态分布检验|Q-Q图

正态分布的概率密度函数&#xff08;Probability Density Function&#xff0c;简称PDF&#xff09;的函数取值是指在给定的正态分布参数&#xff08;均值 μ 和标准差 σ&#xff09;下&#xff0c;对于特定的随机变量取值 x&#xff0c;计算得到的概率密度值 f(x)。这个值表示…...

【接口测试】HTTP协议

一、HTTP 协议基础 HTTP 简介 HTTP 是一个客户端终端&#xff08;用户&#xff09;和服务器端&#xff08;网站&#xff09;请求和应答的标准&#xff08;TCP&#xff09;。通常是由客户端发起一个请求&#xff0c;创建一个到服务器的 TCP 连接&#xff0c;当服务器监听到客户…...

【重新定义matlab强大系列十四】基于问题求解有/无约束非线性优化

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…...

MySQL 索引介绍和最佳实践

目录 一、前言二、索引类型1.1 主键索引&#xff08;PRIMARY KEY&#xff09;1.2 唯一索引&#xff08;UNIQUE&#xff09;1.3 普通索引&#xff08;NORMAL&#xff09;1.3.1 单列普通索引1.3.2 单列前缀普通索引1.3.3 多列普通索引1.3.4 多列前缀普通索引 1.4 空间索引&#x…...

区块链(7):p2p去中心化之初始化websoket服务端

1 整个流程梳理 服务开启onStart()连接打开onOpen()处理接收到的消息onMesage()连接关闭onClose()异常处理onError()2 创建p2p实现类 package com.example.demo.service;import com.example.demo.entity.BlockChain; import org.java_websocket.WebSocket; import org.java_we…...

原型、原型链、判断数据类型

目录 作用 原型链 引用类型&#xff1a;__proto__(隐式原型)属性&#xff0c;属性值是对象函数&#xff1a;prototype(原型)属性&#xff0c;属性值是对象 Function&#xff1a;本身也是函数 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(objec…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!

目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...