如何在 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
函数。它不仅会告诉你每个单词的位置,它还会解释字符。
我有一些图片有单行或多行文本。我想计算行数。就像在这个参考中一样,有 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
函数。它不仅会告诉你每个单词的位置,它还会解释字符。