在opencv中仅检测较粗的水平直线

时间:2015-07-31 08:40:09

标签: c++ opencv background lines

opencv中是否有任何算法只能检测比opencv中给定阈值更厚的更粗的水平线(直线)。检测到的线的厚度应超过给定值。通常在houghLines函数中没有参数来给出阈值厚度。 [无论如何,我的目的是检测文档文章中的所有背景线(超出一定高度和宽度的空白区域),并获得这些检测到的线条的平均厚度。如果更明确我的最终目的是计算文档中文本行之间的平均距离]

2 个答案:

答案 0 :(得分:2)

实现此目标的标准方法是侵蚀。如果你吃掉所有物体的外部5个像素,并且你仍然有一条线,那么之前的线条至少有11个像素宽。

答案 1 :(得分:0)

猜测您想要找到的最粗线的像素数。侵蚀所有其他对象的所有剩余像素。在这种情况下,你将留下最粗的链接的几个像素。然后你可以在那上绘制hough线。

 bool done;
 do
{
  cv::morphologyEx(img, temp, cv::MORPH_OPEN, element);
  cv::bitwise_not(temp, temp);
  cv::bitwise_and(img, temp, temp);
  cv::bitwise_or(skel, temp, skel);
  cv::erode(img, img, element);

 double max;
 cv::minMaxLoc(img, 0, &max);
 done = (max == 0); // max cab be the threshold you want to use 
   } while (!done);

更多阅读检查形态骨架操作: https://en.wikipedia.org/wiki/Morphological_skeletona

http://felix.abecassis.me/2011/09/opencv-morphological-skeleton/ 希望它有所帮助.-查看此链接,它将帮助您了解正在完成的工作。