如何在 MATLAB 中计算图像中的文本行数

How to calculate the number of lines of text in an image in MATLAB

我有一些图片有单行或多行文本。我想计算行数。就像在这个参考中一样,有 5 行。

如何在 MATLAB 中执行此操作?

我假设您已经安装了图像处理工具箱,否则这将不起作用。此外,这假设每一行文本都有足够的 space 来自其他行。

你可以用形态学来解决这个问题。首先,拍摄图像并将其反转,使其成为黑色背景上的白色文本。执行此操作后,使用与图像宽度大小相同的水平线结构元素,并使用形态学膨胀。这实际上将从每一行中取出字母并将它们连接在一起,以便属于同一行的所有字符都属于一个对象。执行此操作后,您可以计算总共有多少行。

首先,我会直接从 Whosebug 读取您的图像,但您上传的图像实际上是 RGB。因此,我将使用 im2bw 将其转换为二进制,然后像我上面谈到的那样反转图像。我所说的形态学逻辑假设对象是黑色背景上的白色,这就是为什么需要反演的原因。

接下来,我们使用 strel, dilate the image with imdilate, then use bwlabel 创建水平线结构元素来计算结果对象的总数,从而计算线数:

%// Read in image, convert to black and white and invert
im = ~im2bw(imread('http://s16.postimg.org/ih7ai6r5h/Para3.jpg'));

%// Create horizontal line structuring element
se = strel('line', size(im,2), 0);

%// Dilate the image with this structuring element
out = imdilate(im, se);

%// Count the total number of objects
[~,num] = bwlabel(out);

作为参考,这是处理后的图像在计算行数之前的样子:

记住,文字是黑底白字。 num 将包含对象总数,我们看到它是预期的 5:

>> num

num =

     5

如果您有 Computer Vision System Toolbox,则可以使用 ocr 函数。它不仅会告诉你每个单词的位置,它还会解释字符。