【发布时间】:2020-06-02 18:09:05
【问题描述】:
我想使用二进制过滤器从车牌中删除除文本以外的任何内容。
我在每个轴上都有投影,但我不知道如何应用它。我的想法是消除白色轮廓。
这是我现在正在工作的图像:
这是 X 轴上的投影:
from matplotlib import pyplot as plt
import pylab
(rows,cols)=img.shape
h_projection = np.array([ x/255/rows for x in img.sum(axis=0)])
plt.plot(range(cols), h_projection.T)
结果如下:
正如您在图表中看到的那样,线的末端是由白色轮廓拍摄的。
如何擦除照片某个阈值处的所有内容?感谢您的每一次帮助
【问题讨论】:
-
你检查thresholding operator from OpenCV了吗?我认为这是在您要求的某个阈值处擦除所有内容。否则,如果您需要缩小白色部分以获得更清晰的图像,我可以建议检查morphological operators in OpenCV。
-
谢谢,如果我检查了文档,实际上二进制图像使用了一系列过滤器,包括阈值。问题是当程序捕获车牌时,它会留下轮廓,所以当我想分割字符时,它会使结果变得困难。根据文档,作为分割阶段的一部分,使用垂直和水平直方图是去除边缘的好方法。
-
好的。也许您可以在直方图上再次使用阈值?我不确定你到底想要达到什么目标,你有一个例子吗?我不确定轮廓、轮廓和边缘的确切含义(据我了解,侵蚀形态算子应该有所帮助,但也许我弄错了)。或者你能指出水平和垂直直方图的文档吗?
-
我想用 CNN 分割字符以读取它们,我在这部分 miro.medium.com/max/704/1*P4GoiHrMfvGcf-lGkXMstQ.png
-
是的,但为什么不再次设置阈值呢?这次只是在一个维度上。如果你的数组是 numpy 数组,
np.where(data < 0.25)会给你一个数组,True用于所有低于 0.25 的值,False用于其余的。然后你发现了字母之间的黑色部分,如图所示,绿色突出显示的部分。如果您想要更复杂,您可以使用scipy.signal.findpeaks在您的函数(黑色部分所在的位置)中查找局部最小值,只需使用1-your_signal作为输入。
标签: python opencv image-processing