2011-02-13 833 views
0

我有很多图像,周围有厚厚的白色边框。对我来说,删除/隔离这些边界最简单的方法是什么?无论如何,我可以使用OpenCV来做到这一点?使用opencv删除图像边框

+0

发布示例代表图片。边框的宽度都一样吗?它们是否与图像边界平行(仅限于垂直和水平)还是与某个角度平行?请明确点。 – misha 2011-02-13 23:51:51

回答

0

不是一个非常优雅的解决方案,但这是我的第一次尝试。

  if(direction == BORDER_SEARCH_DIRECTION.TOP || 
      direction == BORDER_SEARCH_DIRECTION.BOTTOM) 
     { 
      for (int y = startY; y >= 0 && y < _image.Height; y += deltaY) 
      { 
       bool foundNonWhite = false; 
       for (int x = startX; x < _image.Width; x += deltaX) 
       { 
        if (Convert.ToInt32(_image.ManagedArray.GetValue(y, x, 0)) < BORDER_WHITENESS_THRESHOLD) 
        { 
         foundNonWhite = true; 
         break; 
        } 
       } 
       if (!foundNonWhite) 
       { 
        borderAt = y; 
        break; 
       } 
      } 
     } 

基本上,这是假定的边界将在最开始的方式五分之一到从顶部/底部的形象,它搜索的第一行完全是“白”。我运行例程两次,如果我在图像的顶部和底部发现整行白色,我认为我们有一个边框。

该死的事情需要250毫秒。

0

一种方法是使用四叉树分解,使边界区域是一个“叶”节点。然后你可以减去它。