opencv извлекает все горизонтальные и вертикальные линии отдельно с помощью морфологической операции

Я новичок в opencv. Я работаю с opencv и C ++ в Visual Studio 2013. У меня есть задача извлечь все горизонтальные и вертикальные строки документа, содержащего таблицу, отдельно и использовать это для извлечения ячеек, присутствующих в таблице.

Для этого я могу использовать только морфологические операции.

Может ли кто-нибудь предложить процедуру для этого?

Вот образец документа.

Образец изображения


person MOHIT.A Jain    schedule 22.01.2015    source источник
comment
Вам разрешено использовать Hough? docs.opencv.org/doc/tutorials/imgproc/imgtrans/ hough_lines /   -  person Antonio    schedule 22.01.2015
comment
Нет, хафлайны тоже не допускаются. Спасибо за ответ   -  person MOHIT.A Jain    schedule 22.01.2015
comment
На что похож этот документ? Не могли бы вы вырезать его изображение?   -  person pwwpche    schedule 22.01.2015
comment
любое изображение документа, для примера вы можете посмотреть этот URL w3.org/TR/ html401 / images / table2.gif   -  person MOHIT.A Jain    schedule 22.01.2015


Ответы (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);
person MOHIT.A Jain    schedule 23.01.2015
comment
Я получил горизонтальную линию отдельно и вертикальные линии отдельно. Поскольку я использовал строку в качестве элемента структурирования, она может удалить остальные элементы, и у меня остались только строки. Когда мне нужны вертикальные линии, я использую элемент структуры verticalStructure, как указано в коде. - person MOHIT.A Jain; 23.01.2015
comment
Отлично, если вы покажете выходное изображение, оно будет еще более полезным для людей, читающих этот пост в будущем. - person Antonio; 23.01.2015