我正在尝试使用openCV从输入图像中检测文本。为此,我需要从图像中去除噪声成分。我所使用的标准是,如果某些组件的像素计数小于15,则将该特定组件消除。
例如,假设以下提供的图像作为函数的输入:
正如可以看到的那样,两个图像都包含许多不必要的噪点,特别是第一个图像。
因此,如果有人能够建议实现这一目标的可行方法,将不胜感激。
例如,假设以下提供的图像作为函数的输入:
![input image 1](https://istack.dev59.com/6JfpQ.webp)
![Input image 2](https://istack.dev59.com/W4pmy.webp)
因此,如果有人能够建议实现这一目标的可行方法,将不胜感激。
好的,抱歉但这不是用c编写的,也没有使用opencv
,然而我相信在opencv
中一定可以进行标注,只是我还没有使用过......所以这可能有所帮助......基本上的想法是:
在这里,我使用python
中的scipy
来实现此功能,但仅适用于大小(不包括形状,虽然这很容易并且可以消除第一幅图像中的长细线)。为使其正常工作,我们必须知道字母的可接受尺寸范围——然而,在标记后,您可以通过查看平均斑点大小来确定这一点。您仍然可能会得到字母大小的误报,但这些可能可以通过观察它们是否落在某些密集斑点区域的特定区域之外来消除(因为文本在空间上是规则的)......此外,最小句子长度可能是一个强大的约束。
无论如何,下面是代码:
import scipy
from scipy import ndimage
im = scipy.misc.imread('learning2.png',flatten=1)
#threshold image, so its binary, then invert (`label` needs this):
im[im>100]=255
im[im<=100]=0
im = 255 - im
#label the image:
blobs, number_of_blobs = ndimage.label(im)
#remove all labelled blobs that are outside of our size constraints:
for i in xrange(number_of_blobs):
if blobs[blobs==i].size < 40 or blobs[blobs==i].size>150:
im[blobs==i] = 0
scipy.misc.imsave('out.png', im)
结果: