java - 正确填充图像中的孔

标签 java opencv

我必须找出图像的轮廓。之后,我想知道如何填充数字字符中的孔,而不是其他空格中的孔。图片如下。

/image/jlLYE.jpg

实际上,如果不可能的话,我还有其他方法可以在java平台中使用openCV对该图像进行分割吗?我希望图像仅包含字符。谢谢。

/image/kY4Dh.png

最佳答案

这是一个简单的方法(但我不确定它是否在任何地方都有效。自己测试一下)

注意:代码是 Python 语言,我不会 Java,对此感到抱歉:(

  1. 加载灰度图像
  2. 应用大津二值化
import cv2
import numpy as np
img = cv2.imread('test.png',0)
ret, thresh = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

下面是阈值图像:

enter image description here

现在您可以尝试两种方法:

3a。 使用 3x3 内核进行中值模糊

res = cv2.medianBlur(thresh,3)

结果:

enter image description here

3b。 使用 3x1 内核进行侵 eclipse (垂直)。 3x1 因为图像中的所有线条都更加水平。如果其他图像中有垂直线,您可能需要采用3x3内核(不确定。检查一下)

kernel = np.ones((3,1))
cls = cv2.erode(thresh, kernel)

如果您认为自己也丢失了数字的某些部分,您可以在腐 eclipse 后应用膨胀,或者用形态学开放函数替换所有内容。

结果:

enter image description here

最后,找到轮廓。它还会拾取预处理图像中留下的一些噪点,但您可以通过检查它们的长宽比、面积等来过滤掉它们。

关于java - 正确填充图像中的孔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22952505/

相关文章:

java - 使用 if else 语句调用不同的类

image-processing - 从直方图中获取黑白强度值

android - 希望在 OpenCV(标量)中使用 Android 颜色(int)

algorithm - 在图像上找到十字

C++ Opencv - 通过套接字获取图像后的图像处理

Opencv 转换图像

java - 在运行时设置xmx

java - 如何在Java中使用sqoop将表从Oracle导入到Hive?

java - android中使用android.sax解析XML问题

java - 如何在 Guice 中向 'Class<?> clazz' 注入(inject)一个类?