我有一些图像有单行或多行文字。我想计算行数。就像在这个参考中一样,有5行。
如何在MATLAB中执行此操作?
答案 0 :(得分:1)
我假设您安装了图像处理工具箱,否则这将无效。此外,这假设每行文本与其他行有足够的空间。
你可以用形态学来解决这个问题。首先,拍摄图像并将其反转,使其成为黑色背景上的白色文本。执行此操作后,请使用水平线结构元素,该元素的大小与图像的宽度相同,并使用形态膨胀。这实际上将从每一行中取出字母并将它们连接在一起,以便属于同一行的所有字符都属于一个对象。完成此操作后,您将计算总行数。
首先,我将直接从StackOverflow读取您的图像,但您上传的图像实际上是RGB。因此,我将使用im2bw
将其转换为二进制,然后像我上面谈到的那样反转图像。我所说的形态逻辑假设物体在黑色背景上是白色的,这就是需要反转的原因。
接下来,我们使用strel
创建水平线结构元素,使用imdilate
扩展图像,然后使用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
答案 1 :(得分:0)
如果您有计算机视觉系统工具箱,则可以使用ocr
功能。它不仅会给你每个单词的位置,还会解释这些单词。