如何从opencv中删除边线?

时间:2016-01-03 19:31:31

标签: opencv

我必须从数百张灰度图像的两侧删除一些线条。

enter image description here

在此图像中,三条线出现。

但是线条不一致,即它们出现在图像的上方,下方,左侧和/或右侧。它们的长度和宽度都不相等。

1 个答案:

答案 0 :(得分:1)

如果你可以认为边框没有重要信息,你可以像这样裁剪照片:

C ++代码:

cv::Mat img;
//load your image into img;
int padding=MAX_WIDTH_HEIGHT_OF_THE LINEAS_AREA
img=img(cv::Rect(padding,padding,img.cols-padding,img.rows-padding));

如果没有,你必须找到一个不那么愚蠢的解决方案,例如:

  1. Findcontours
  2. 删除远离边框的轮廓。
  3. 在空白图像上绘制轮廓
  4. 使用合适阈值的hough线。
  5. 删除与图像边框内的线相交的轮廓。
  6. 另一种解决方案,假设手写形状已连接:

    1. Findcontours
    2. 获得最大面积的轮廓。
    3. 在strock参数中使用-1(填充)标记在空白图像上绘制。
    4. bitwise_and在原始图片和您制作的图片之间
    5. 另一种解决方案,假设手写形状可能不连续:

      1. Findcontours
      2. 删除所有点非常接近边界的任何轮廓(使用带有阈值的欧几里德距离)
      3. 使用strock参数中的-1(填充)标记在空白图像上绘制所有剩余轮廓。
      4. bitwise_and在原始图片和您制作的图片之间
      5. P.S。我没有触及HoughLine变换,因为我不了解形状。我假设其中一些可能包含很直线。