如何动态剪切图像中的数字?

时间:2014-09-04 11:20:18

标签: vb.net image image-processing

我已经到了这个阶段: picture of img

我可以在上面的图像中找到数字,但我需要将它们剪掉,以便我可以保留订单等但是数字增加了间距变化和数字的位置?

所以我认为应该是找到一个白色的PX继续,直到它找到一个坚实的黑色col然后用点做一个简单的切割任何帮助都会很棒。

2 个答案:

答案 0 :(得分:3)

一个简单的解决方案是:

  1. 找到包含白色像素的第一个最上面的水平线
  2. 从该行找到第一条仅包含黑色像素的水平线
  3. 这两行是你的上边界和下边界。

    在这些边界之间进行如下操作:

    1. 找到包含白色像素的第一个最左边的垂直线
    2. 从该行找到最后一条垂直线,它只包含黑色像素,直接位于带有白色像素的线条之后。
    3. 这两行是你的左右边界。

      分离单个数字的步骤可以类似地进行。

      如果您需要确定图片中的数字,我建议使用专门的计算机视觉库。

      一些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
      

答案 1 :(得分:1)

我将开始研究Connected组件分段。您找到一个字符(数字)内的像素。然后运行连通分量算法,该算法在特定规则集下查找所有连接的像素(例如,颜色略有偏差,在硬边界处停止等)。

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

如果您可以使用库,我确信OpenCV或类似的库支持开箱即用。

//编辑 我发现你需要VB.net。可能最简单的方法是将一些算法移植到VB或自己创建一个算法。

参见例如http://www.codeproject.com/Articles/336915/Connected-Component-Labeling-Algorithm

  

会发生什么

     

输入

     

包含两种形状的图像:

     

输出

     

现在每个都被分成单个图像。