OpenCV 指针仪表盘参数读取(一) 方案设计

最近涉及到一个对指针式仪表盘通过图像处理的方式进行参数读取的工作,在此项工作中,比较重要的目的是 尽可能提高参数读取的准确率。

确定两项主要工作内容:

1.识别指针仪表盘的参数

2.尽可能提高准确率

网上相关的教程比较多,OpenCV中的python版本也提供了相关的教程,但想搭建一个适合于项目的工程,还是需要进行参数调节的,毕竟不是一个可以自动调节的黑箱工程,通过对指针式仪表的识别调研,初步方案整理如下:

在预处理的过程,预选方案如下:

1.当涉及仪表拍摄偏移等问题,可以采用仿射变换或透视变换的方式来对图像进行纠正。

2.在对图像进行圆定位,指针定位的过程中,需要进行图像的灰度化,平滑去噪,甚至腐蚀膨胀等操作,预处理的质量在很大程度上会影响后续的定位算法效果。

通过以上的方案设计,预先对工程框架有一个设计。并在后续中对单个模块进行设计和调试:

int main(int argc, char** argv)
{
	// Define Window Name

	// Define File Path

	// Create a named window with the name of the file

	// Define Variables

	// Load the image from the given file name

	// gray

	// medianBlur filter

	// HoughCircle

	// HoughLine
 
	// LineSpecify

	// Calculate value

	// Show and save the dstImage

	return 0;
}

最终效果图

由于刻度不确定,输出的是角度

方案github工程:OpenCV-Point-Meter-Detection

欢迎评论文章,给予宝贵建议,工程提供在github下载学习,请关注作者,共同学习交流。

  • 18
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenCV是一个强大的计算机视觉库,可以用于图像处理和分析。要使用指针仪表盘读取功能,需要以下步骤: 1. 加载图像:使用OpenCV函数读取仪表盘图像并将其存储为Mat对象。 2. 预处理图像:使用图像处理技术,如灰度转换、平滑和二值化,以便更好地识别仪表盘指针。 3. 检测指针:使用霍夫变换检测仪表盘指针。这将返回指针的位置和角度。 4. 计算度数:根据指针的位置和角度计算出指针所指示的度数。 下面是一个使用OpenCV进行指针仪表盘读取的示例代码: ```python import cv2 import math # 读取图像 img = cv2.imread('dashboard.jpg') # 灰度转换 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 平滑处理 blur = cv2.GaussianBlur(gray, (5, 5), 0) # 二值化 ret, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 检测圆形轮廓 circles = cv2.HoughCircles(thresh, cv2.HOUGH_GRADIENT, 1, 20, param1=50, param2=30, minRadius=0, maxRadius=0) # 获取圆形轮廓 if circles is not None: circles = np.round(circles[0, :]).astype('int') for (x, y, r) in circles: # 绘制圆形轮廓 cv2.circle(img, (x, y), r, (0, 255, 0), 2) # 获取指针位置 pointer_x = int(x + r * math.cos(math.radians(-90))) pointer_y = int(y - r * math.sin(math.radians(-90))) # 绘制指针 cv2.line(img, (x, y), (pointer_x, pointer_y), (0, 0, 255), 2) # 计算度数 degree = int((math.atan2(y - pointer_y, pointer_x - x) * 180 / math.pi) + 180) print('degree:', degree) cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例中,我们首先读取指针仪表盘的图像,然后使用OpenCV函数对其进行了预处理和检测。最后,我们计算了指针所指示的度数,并将其打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值