使用opencv

时间:2018-09-26 20:53:59

标签: python opencv

我的代码得到了很多带有数字的小图像。我尝试将其与模板进行比较并获取正确的数据。它起作用了。

enter image description here enter image description here

original= cv2.imread('im/10.png')
sought = (254,254,254)
result = np.count_nonzero(np.all(original==sought,axis=2))

如您所见,在这些情况下,白色数字位于图片的不同角落,没问题,结果(白色像素的数量)相等,我得到的是18 = 18。 但现在有新图片enter image description hereenter image description here

首先,这里的数字不是(254,254,254)。我认为图像可能更暗淡。或更差的质量,我尝试使用:

result = np.count_nonzero(np.all(original > 200,axis=2))

不幸的是,它给了我不同的数据。里面有13张的两张照片不相等。

我想要什么:

从深色背景中指出白色数字的方法,但周围的白色细圆圈除外。 (在13张照片上)圆不是问题,如果我在中心裁剪图像并摆脱圆,我的结果将不会改变-13仍然是!= 13。

也许可以将图像转换为灰度,或者转换为HSV,也许只是使其更亮或更对比度。

像素计数对我有好处,它非常快且通常准确。

我会重复:现在我的代码看到两张图片有13张一样的图片(有不同的颜色,或者亮度或黑白比率,我不知道),我想摆脱这个问题。

1 个答案:

答案 0 :(得分:1)

我建议您首先对图像进行阈值处理,这意味着带有字母的像素的值将为255,其余的像素值为0。可以使用OpenCV的Adaptive Threshold函数(您可以看到this答案)来完成此操作。

然后,您将需要一种更好的方法来确定数字。仅计算白色像素的数量还不够鲁棒。例如,数字1331 应该具有相同数量的白色像素。这可能会破坏您的算法。

这里最好的解决方案是AI。例如,您可以研究Python Tesseract,但是有很多Python软件包和教程。只是Google this,您会得到诸如this之类的有用答案。甚至还有类似this的教程。

如果您不想使用AI,那么您的算法将总是在某个地方中断。