基于opencv的指针式仪表的识别与读数

2024-01-13 09:36

本文主要是介绍基于opencv的指针式仪表的识别与读数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于指针式仪表的识别与读数,可以通过以下步骤使用OpenCV实现

  • 读取图像:使用cv2.imread()函数读取要处理的仪表图像。
    在这里插入图片描述

  • 灰度转换:使用cv2.cvtColor()函数将彩色图像转换为灰度图像。这是因为灰度图像只有一个通道,便于后续的处理。

  • 平滑滤波:为了去除噪声,可以使用中值滤波或高斯滤波。中值滤波通过将每个像素替换为其邻域像素的中值来消除噪声。高斯滤波则是通过计算像素周围邻域像素的加权平均值来平滑图像。你可以根据实际情况选择适合的滤波方法,例如使用cv2.medianBlur()进行中值滤波或使用cv2.GaussianBlur()进行高斯滤波。对于指针式仪表的识别与读数,可以通过以下步骤使用OpenCV实现:

  • 读取图像:使用cv2.imread()函数读取要处理的仪表图像。

  • 灰度转换:使用cv2.cvtColor()函数将彩色图像转换为灰度图像。这是因为灰度图像只有一个通道,便于后续的处理。
    在这里插入图片描述

  • 平滑滤波:为了去除噪声,可以使用中值滤波或高斯滤波。中值滤波通过将每个像素替换为其邻域像素的中值来消除噪声。高斯滤波则是通过计算像素周围邻域像素的加权平均值来平滑图像。你可以根据实际情况选择适合的滤波方法,例如使用cv2.medianBlur()进行中值滤波或使用cv2.GaussianBlur()进行高斯滤波。

  • 边缘检测:使用Canny边缘检测算法来检测图像中的边缘。Canny边缘检测算法首先使用Sobel算子计算图像的梯度强度和方向,然后通过非最大抑制和双阈值处理来提取出真正的边缘。使用cv2.Canny()函数可以方便地进行Canny边缘检测,你可以根据实际情况调整阈值参数。

  • 轮廓提取:使用cv2.findContours()函数来提取边缘图像中的轮廓。轮廓是连续的曲线,可以用来表示物体的形状。通过设置适当的参数,可以选择性地提取出仪表盘的指针轮廓。

  • 指针识别:对于仪表指针,通常可以通过以下特征进行识别:

  • 面积大小:指针通常具有相对较大的面积。

  • 形状:指针通常是细长的形状,可以通过检查轮廓的形状来判断是否为指针。

  • 位置:指针通常位于仪表盘中心附近。

    可以遍历提取到的轮廓,根据以上特征来筛选出指针轮廓。

  • 读数计算:对于选定的指针轮廓,可以通过计算指针与仪表盘中心之间的夹角来得到仪表的读数。可以使用cv2.minEnclosingCircle()函数找到指针的中心点,然后计算指针中心点与仪表盘中心点之间的夹角。

以上就是通过OpenCV对指针式仪表进行读数的一般步骤。根据实际情况,你可能需要调整参数、采取不同的滤波方法或添加其他处理步骤来适应不同的仪表图像。
在这里插入图片描述

  1. 边缘检测:使用Canny边缘检测算法来检测图像中的边缘。Canny边缘检测算法首先使用Sobel算子计算图像的梯度强度和方向,然后通过非最大抑制和双阈值处理来提取出真正的边缘。使用cv2.Canny()函数可以方便地进行Canny边缘检测,你可以根据实际情况调整阈值参数。

  2. 轮廓提取:使用cv2.findContours()函数来提取边缘图像中的轮廓。轮廓是连续的曲线,可以用来表示物体的形状。通过设置适当的参数,可以选择性地提取出仪表盘的指针轮廓。

  3. 指针识别:对于仪表指针,通常可以通过以下特征进行识别:

    • 面积大小:指针通常具有相对较大的面积。
    • 形状:指针通常是细长的形状,可以通过检查轮廓的形状来判断是否为指针。
    • 位置:指针通常位于仪表盘中心附近。

    可以遍历提取到的轮廓,根据以上特征来筛选出指针轮廓。

  4. 读数计算:对于选定的指针轮廓,可以通过计算指针与仪表盘中心之间的夹角来得到仪表的读数。可以使用cv2.minEnclosingCircle()函数找到指针的中心点,然后计算指针中心点与仪表盘中心点之间的夹角。

结果展示

可以看出下图给出了角度值,通过圆盘的固定尺度的丈量,就可以自动化推理出,指数是多少。

在这里插入图片描述

代码与总结

要基于OpenCV对指针式仪表进行读数,可以采用以下步骤:

  • 读取图像:使用cv2.imread()函数读取图像文件,或从摄像头中实时获取图像。
  • 图像预处理:对图像进行预处理,以便提取出仪表盘的指针和刻度线等关键部分。例如,可以使用cv2.cvtColor()函数将图像转换为灰度图像,然后使用cv2.GaussianBlur()函数进行高斯模糊,以去除噪声。
  • 提取特征:使用OpenCV的特征提取算法,如Canny边缘检测、Hough变换等,找到仪表盘的指针和刻度线等关键部分。
  • 计算角度:通过计算指针与刻度线之间的夹角,即可得到仪表的读数。可以使用cv2.minEnclosingCircle()函数找到指针的中心点,然后计算指针中心点与仪表盘中心点之间的夹角。
  • 显示结果:将读数显示在图像上,并将图像显示出来或保存为文本
import cv2
import numpy as np# 读取图像
img = cv2.imread('meter.jpg')# 图像预处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)# 提取特征
edges = cv2.Canny(blur, 50, 200, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi/180, 100)# 找到指针和刻度线
for line in lines:rho, theta = line[0]if theta < np.pi/4 or theta > 3*np.pi/4:x0 = np.cos(theta) * rhoy0 = np.sin(theta) * rhopt1 = (int(x0 + 1000*(-np.sin(theta))), int(y0 + 1000*np.cos(theta)))pt2 = (int(x0 - 1000*(-np.sin(theta))), int(y0 - 1000*np.cos(theta)))cv2.line(img, pt1, pt2, (0, 0, 255), 3)# 计算角度
center = (img.shape[1]//2, img.shape[0]//2)

最后

#联系qq1309399183

这篇关于基于opencv的指针式仪表的识别与读数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601004

相关文章

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

Pytorch微调BERT实现命名实体识别

《Pytorch微调BERT实现命名实体识别》命名实体识别(NER)是自然语言处理(NLP)中的一项关键任务,它涉及识别和分类文本中的关键实体,BERT是一种强大的语言表示模型,在各种NLP任务中显著... 目录环境准备加载预训练BERT模型准备数据集标记与对齐微调 BERT最后总结环境准备在继续之前,确

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图