opencv使用形态学操作分别提取所有水平和垂直线

时间:2015-01-22 12:40:09

标签: c++ opencv extraction

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

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

有人可以建议实现这个目标吗?

这是一份示例文件。

Sample Image

1 个答案:

答案 0 :(得分:2)

enter image description here enter image description here终于得到了输出。 看看代码。

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);