OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度

本文来源公众号“OpenCV与AI深度学习,仅用于学术分享,侵权删,干货满满。

原文链接:OpenCV如何读取仪表中的指针刻度

最近遇到一个问题,如何读取仪表中的指针指向的刻度。

 解决方法有多种,比如:

  1. 方案一:模板匹配+边缘检测+霍夫直线检测,
  2. 方案二:神将网络(CNN)目标定位等,其中CNN就有点麻烦了,需要一定数量的训练样本,太麻烦,
  3. 方案三:模板匹配+k-means+直线拟合

因为方案一太普通,最后我采用了方案三,

具体做法如下:

首先说一下模板匹配,它是OpenCV自带的一个算法,可以根据一个模板图到目标图上去寻找对应位置,如果模板找的比较好那么效果显著,这里说一下寻找模板的技巧,模板一定要标准、精准且特征明显。

第一次的模板选取如下:

匹配的效果如下:

根据模板选取的原则我们,必须进行两次匹配才能的到精确和更高准确率的结果

第二次的模板如下:

然后在第一次结果的的基础上也就是蓝色矩形框区域进行第二次匹配,结果如下:

下面对上图进行k-means二值化,由于途中的阴影,所以只截取原图的0.6(从中心)作为k-means聚类的样本点,然后将聚类结果应用至上图并重新二值化(聚类结果为2,求中值,根据中值二值化),同时只保留内切圆部分,效果如下:

接下来就是拟合直线,拟合直线我采用旋转虚拟直线法,假设一条直线从右边0度位置顺时针绕中心旋转当它转到指针指向的位置时重合的最多,此时记录下角度,最后根据角度计算刻度值。效果图如下:

最后就读取到了数值。

聚类结果:

[[31.99054054 23.04324324 14.89054054]

 [62.69068323 53.56024845 40.05652174]]

重合数量和对应角度:(1566, 158) 

对应刻度:36.005082940886126

源码如下:

THE END!

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/1885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 基础知识总结

进制转换 十进制转十六进制:Integer.toHexString(int i) 十进制转八进制:Integer.toOctalString(int i) 十进制转二进制:Integer.toBinaryString(int i) 十六进制转十进制:Integer.valueOf("FFFF",16).toString() 八进…

Linux使用Docker部署DashDot访问本地服务器面板

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘,并且结合cpolar内网穿透工具可以实现公网实时监测服务器系统、处理器、内存、存储、网络、显卡等,并且拥有API接…

【C++】双指针算法:复写零

1.题目 别看这是一道简单题,它的通过率低于一些中等甚至困难的题目! 大大增加这道题目难度的是最后一句话:1.不可越界写入。2.就地修改。 如果可以再创建一个数组的话,那么这道题目就会非常简单,但这道题目必须要求在…

Linux的学习之路:18、进程间通信(2)

摘要 本章主要是说一下命名管道和共享内存 目录 摘要 一、命名管道 1、创建一个命名管道 2、匿名管道与命名管道的区别 3、命名管道的打开规则 4、代码实现 二、system V共享内存 1、共享内存 2、共享内存函数 三、代码 四、思维导图 一、命名管道 1、创建一个命…

13.Nacos简介,下载,安装,启动-windows

Nacos是阿里巴巴的产品,现在是SpringCloud的一个组件。 相比Eureka功能更加丰富,服务注册与发现和分布式配置。 Nacos下载地址: https://github.com/alibaba/nacos windows下载nacos-server-1.4.1.zip文件 nacos是基于java语言实现的&…

【系统架构师】-案例考点(三)

1、信息系统架构ISA设计 四种架构模型: 1)单机应用 2)客户机/服务器模式:两层、三层C/S、B/S模型、MVC模式等 3)面向服务架构SOA 4)企业数据交换总线:不同企业应用之间通过信息交换的公共频…

2024-04-21 问AI: 介绍一下花卉数据集Oxford 102 flowers

文心一言 Oxford 102 flowers数据集是一个由牛津大学工程科学系于2008年发布的花卉图像分类数据集。该数据集主要用于图像分类任务,并涵盖了英国常见的102种花卉,每种花卉由40到258张图像组成。这些图像涵盖了较大的比例、姿势和光线变化,使…

opengauss pending启动转主备代码分析

opengauss以pending启动时,也会执行StartupXLOG,并且replay wal,ApplyRedoRecord()会被调用。 当对pending状态的gaussdb,执行gs_ctl notify -M primary 时,会启动walsender等线程。 gs_ctl与gaussdb之间的交互不是通…

一招下载transformers真不用网上那些教程(我试了1*mol多次才知道)

pip很多是2 然而!!!!!!!!!!!!!!!!!!!!…

element中file-upload组件的提示‘按delete键可删除’,怎么去掉

问题描述 element中file-upload组件会出现这种提示‘按delete键可删除’ 解决方案: 这是因为使用file-upload组件时自带的提示会盖住上传的文件名,修改一下自带的样式即可 ::v-deep .el-upload-list__item.is-success.focusing .el-icon-close-tip {d…

洛谷 -P1007 独木桥(模拟,思维)

独木桥 题目背景 战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤怒&#xf…

angular17 打包项目放在了多出了个browser目录

修改package.json配置文件,把 "builder": "angular-devkit/build-angular:application", 改成"builder": "angular-devkit/build-angular:browser", 把"browser": "src/main.ts",改成"main&qu…

排队分红,你想象不到的电商新玩法

亲爱的朋友们,我是微三云的周丽,一名专注于私域电商模式创新的探索者。 随着互联网的迅猛发展,电商行业的商业模式也在不断演变。最近,一种全新的消费返利模式——排队分红模式,成为了业界瞩目的焦点。这一模式结合了…

组合模式【结构型模式C++】

1.概述 组合模式又叫部分整体模式属于结构型模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。 2.结构 组件(Component):定义了组合中所有对象的通用接口&#xff0c…

three.js(3):添加three. js坐标轴、光源和阴影效果

1 实现步骤 要实现阴影效果同样需要几个重要的概念。 我们首先研究一下日常生活中是如何产生阴影效果的。 需要有光。需要一个物体,比如苹果、狗等。需要一个接受投影的元素,比如地面、桌面等。 在 Three.js 中要产生阴影效果其实和现实世界的原理差…

python:使用scipy及numpy对三维空间点进行插值并可视化

用scipy及numpy对三维空间点进行插值并可视化 示例 1示例 2示例 3 示例 1 要在Python中对三维坐标空间点进行插值,可以使用SciPy库中的插值函数。首先,需要安装SciPy库。可以使用以下命令来安装: pip install scipy接下来,可以使…

mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause

解决方案: select version(), sql_mode;SET sql_mode(SELECT REPLACE(sql_mode,ONLY_FULL_GROUP_BY,)); 完美的解决方案是: 1 show variables like "sql_mode"; 2 3 set sql_mode; 4 set sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABL…

在Debian上可以部署哪些有用的服务?

2024年4月20日,周六下午 在 Debian 上可以部署许多有用的服务,以满足各种需求。 以下是一些常见的有用服务: Web 服务器:如 Apache、Nginx、Lighttpd 等,用于托管网站和 Web 应用。数据库服务器:如 MySQL…

java面向对象.day26(抽象类)

说明: Java抽象类是一种特殊的类,它不能被直接实例化,只能作为其他类的基类(即超类或父类)。抽象类的主要作用是定义一组公共的行为和属性,这些行为和属性可以由其子类共享和继承。 1. 定义抽象类 抽象类…

分布式与一致性协议之拜占庭将军问题(一)

拜占庭将军问题 概述 拜占庭将军问题其实是借拜占庭将军故事展现了分布式共识问题,探讨和论证了解决的办法。实际上,拜占庭将军问题是分布式领域最复杂的一个容错模型,一旦搞懂了它,久能掌握分布式共识问题的解决思路&#xff0…