一、目的
想要实现的功能:帮助我们在泵中扫描燃油,并在应用程序中输入燃油信息。
所需技术:①python程序对于拍摄的汽油泵的图像,尝试从中读取数字。——opencv实现。②先使用python对其进行原型设计,然后将代码转换成C++以在ios应用程序上运行。
但是我不会部署在移动端,对第二个不做研究。
目标:需要考虑两个问题:
可以从图像中分离出数字吗?——用opencv图像阈值法来查找数字,进行裁剪轮廓
可以确定图像代表哪个数字吗?——KNN进行分类训练。
二、图像中分离出数字
思路:利用简单的图像阈值法来查找数字。
图像阈值法:将图像转换为灰度,然后说灰度值小于某个常数的任何像素,则该像素为一个值,否则为另一个。最后,得到的二进制图像只有两种颜色,在大多数情况下只是黑白图像。一幅图通常包含目标物体还有各种背景和噪声,想要得到目标物体,就要设置一个阈值,用阈值将图像的像素分割成两部分。
但是阈值的值如何确定呢?——五、自动化可以解决阈值的选择
这个概念在OCR应用中非常有效,但是主要问题是决定对该阈值使用什么。我们可以选择一些常量,也可以使用OpenCV选择其他一些选项。我们可以使用自适应阈值而不是使用常数,这将使用图像的较小部分并确定要使用的不同阈值。这在具有不同照明情况的应用中特别有用,特别是在扫描气泵中。
设置好阈值后,使用opencv中的findcontours方法查找图像中连接了白色像素部分的区域。绘制轮廓后,便可以裁剪出这些区域并确定它们是否可能是数字以及是什么数字。
2.1 图像处理流程
这是我在测试图像处理中使用的原始图像。它有一些眩光点,但是图像相当干净。让我们逐步完成获取此源图像的过程,并尝试将其分解为单个数字。
在代码中主要对应于playground.py函数,这个相当于完整的代码,会输出最后的预测结果,其中图像分割部分主要调用的是frameProcessor.py文件中的函数。
原始图片
2.1.1 图像准备
在开始图像处理流程之前,我们决定先调整一些图像属性,然后再继续。这有点试验和错误,但注意到,当我们调整图像的曝光度时,可