如何动态地从图片中剪切出数字?

4
我已经完成了以下步骤: 图片 在上面的图片中,我能够找到数字,但是我需要将它们剪切出来以保留顺序等信息。然而,随着数字的增加,间距会发生变化,数字的位置也会改变。
因此,我认为应该先找到一个白色像素点,然后继续查找直到找到一个实心黑色列,然后使用这些点进行简单的剪切。如果有任何帮助,那就太好了。
2个回答

3
一个简单的解决方案如下:
  1. 找到包含白色像素的最上面一条水平线
  2. 从那条线开始,找到第一条只包含黑色像素的水平线
这两条线就是您的上边框和下边框。
在这两条边框之间进行以下操作:
  1. 找到包含白色像素的最左边一条竖直线
  2. 从该行开始,查找最后一条仅包含黑色像素并直接跟在白色像素行后的垂直线。
这两条线是您的左右边框。
分离单个数字的步骤可以类似地执行。
如果您需要识别图片中的数字,我建议使用专业的计算机视觉库。
以下是一些VB.net伪代码供参考:
Sub FindTopBorder(image As MyImage) As Integer
  For y = 0 to image.Height - 1
    For x = 0 to image.Width - 1
      Dim pixel = image.GetPixel(x, y)
      If ('Check if pixel is white here with RGB or Color') Then
        Return y
      End If
    Next
  Next
  ' Just in case there are no white pixels or use an exception instead
  Return -1
End Sub

你能写一点代码来完成其中一个方面吗?因为我不知道该如何开始。谢谢。 - Ben Sup Denness

1
我会开始研究连接组件分割。您需要找到一个在字符(数字)内的像素。然后运行连接组件算法,该算法根据特定的规则(例如颜色略微偏差,在硬边界处停止等)查找所有连接的像素。

http://en.wikipedia.org/wiki/Connected-component_labeling

如果您可以使用库,我相信OpenCV或类似的库可以直接支持此功能。
//编辑 我看到您需要VB.net。可能最容易的方法是将一些算法移植到VB中或者自己创建一个。
请参见例如http://www.codeproject.com/Articles/336915/Connected-Component-Labeling-Algorithm 期望什么
输入
包含两个形状的图像:
输出
现在每个形状都被分成单独的图像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接