【问题标题】:opencv extracting all horizontal and vertical lines separately using morphological operationopencv使用形态学操作分别提取所有水平和垂直线
【发布时间】:2015-01-22 12:40:08
【问题描述】:

我是opencv的新手。我在 Visual Studio 2013 上使用 opencv 和 C++。我的任务是分别提取包含表格的文档的所有水平线和垂直线,并使用它来提取表格中存在的单元格。

我只能使用形态学操作来实现这一点。

任何人都可以提出实现这一目标的程序吗?

这是一个示例文档。

【问题讨论】:

标签: c++ opencv extraction


【解决方案1】:

终于得到输出了。 看代码。

string src = "d://sabari//23.jpg";
Mat im = imread(src);
Mat gray;


if (im.channels() == 3)
{
    cvtColor(im, gray, CV_BGR2GRAY);
}
else
{
    gray = im;
}

adaptiveThreshold(~gray, gray, 255, CV_ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
Mat vertical = gray.clone();
int horizontalsize = gray.cols / 30;

Mat structure = getStructuringElement(MORPH_RECT, Size(horizontalsize,1));

erode(gray, gray,structure, Point(-1, -1));
dilate(gray, gray,structure, Point(-1, -1));

imshow("ans", gray);
imwrite("d://out2.jpg", gray);

int verticalsize = vertical.rows / 30;

Mat verticalStructure = getStructuringElement(MORPH_RECT, Size( 1,verticalsize));

erode(vertical, vertical, verticalStructure, Point(-1, -1));
dilate(vertical, vertical, verticalStructure, Point(-1, -1));

imshow("ans1", vertical);
imwrite("d://out3.jpg", vertical);

【讨论】:

  • 我分别得到了水平线和垂直线。因为我使用线条作为我的结构元素,它能够删除其余元素,我只剩下线条。当我需要垂直线时,我使用代码中提到的结构元素“verticalStructure”。
  • 干得好,如果您显示输出图像,它将对将来阅读此帖子的人更有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多