【发布时间】:2018-09-27 15:03:41
【问题描述】:
我的代码得到了许多带有数字的小图像。我尝试将其与我的模板进行比较并获得正确的数据。成功了。。
original= cv2.imread('im/10.png')
sought = (254,254,254)
result = np.count_nonzero(np.all(original==sought,axis=2))
正如您在这些情况下所看到的,白色数字位于图片的不同角落,没问题,结果(白色像素的数量)相等,我得到了 18=18。 但是现在有新照片,.
首先,这里的数字不是 (254,254,254)。我认为图像可能更暗淡。或质量较差,我尝试使用:
result = np.count_nonzero(np.all(original > 200,axis=2))
不幸的是,它给了我不同的数据。两张里面有13个的不等号。
我想要什么:
从深色背景中指出白色数字的方法,除了周围的细白圈。 (在 13 张图片中)圆圈不是问题,如果我在中心裁剪图像并去掉圆圈,我的结果不会改变 - 13 仍然!= 13。
也许可以将图像转换为灰度,也许是 HSV,也许只是为了使其更亮或对比度更高。
像素计数对我有好处,它非常快速且通常准确。
我再重复一遍:现在我的代码看到两张图片有 13 个不同(有不同的颜色,或亮度或黑白比例,我不知道)我想摆脱这个问题。
【问题讨论】:
-
您应该尝试使用 OTSU 作为第一步的阈值,然后(取决于结果)直接计算所有非零像素。
-
你通过计算像素来识别物体的方法是错误的。
-
像素计数作为区分数字/字母的方法不太可能非常准确。尝试使用 Google 搜索 “模板匹配” 和/或 “光学字符识别” 和 Tesseract。祝你好运!