2016-11-20 3 views
3

В настоящее время я работаю над проектом, который читает изображение, применяет ряд фильтров с целью размещения ограничивающего прямоугольника вокруг интересующих областей.Удаление ненужных строк из изображения

У меня есть изображение рукописного текста на линованной бумаге, как мой вход:

string imageLocation = "loctation of image file"; 
src = imread(imageLocation, 1); 

Inputted image

Я затем преобразовать изображение в оттенки серого и применять адаптивную пороговую:

cvtColor(src, newsrc, CV_BGR2GRAY); 
adaptiveThreshold(~newsrc, dst, 255, CV_ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); 

Applied adaptive thresholding

Затем я использую морфол ogical операции, чтобы попытаться устранить горизонтальные линии с картинки:

Mat horizontal = dst.clone(); 

int horizontalSize = dst.cols/30; 
Mat horizontalStructure = getStructuringElement(MORPH_RECT, Size(horizontalSize,1)); 

erode(horizontal, horizontal, horizontalStructure, Point(-1, -1)); 
dilate(horizontal, horizontal, horizontalStructure, Point(-1, -1)); 

cv::resize(horizontal, horizontal, cv::Size(), 0.5, 0.5, CV_INTER_CUBIC); 
imshow("horizontal", horizontal); 

который производит следующее (до сих пор так хорошо): Input image horizontal line seperation

, то я стараюсь использовать те же подрывать & методы Разбавить на рисунке из вертикали:

int verticalsize = dst.rows/30; 
Mat verticalStructure = getStructuringElement(MORPH_RECT, Size(1,verticalsize)); 

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

cv::resize(vertical, vertical, cv::Size(), 0.5, 0.5, CV_INTER_CUBIC); 
imshow("vertical", vertical); 

Я следую примеру OpenCV, которая может быть найдена here

Но выход я получаю по вертикали: Vertical output

Мой вопрос, как я пошел бы удалить эти горизонтальные линии от изображения.

Извините за длинный вопрос (я хотел объяснить как можно больше) и заранее заблаговременно за любой совет.

+0

Что вы хотите, пытаясь выяснить вертикаль? –

+0

Я разместил ссылку на пример OpenCV, и они используют морфологические операции, чтобы извлечь горизонтальные и вертикальные линии, чтобы отделить текст от горизонтальных линий. –

+0

Я не могу видеть, где был объявлен и инициализирован 'Mat vertical'? ты уверен в этом? –

ответ

1

Вы можете попытаться сделать эту работу в частотной области, как здесь:

http://lifeandprejudice.blogspot.ru/2012/07/activity-6-enhancement-in-frequency_25.html

http://www.fmwconcepts.com/imagemagick/fourier_transforms/fourier.html

Работа с FFT является очень эффективным при добавлении/удалении regilar сетки от изображения.

+0

Теперь я посмотрю. Если возможно, можете ли вы проверить пример, который я связал в вопросе, чтобы посмотреть, как это делается. Я хотел бы знать, где я на самом деле ошибаюсь –

+0

Ваш вертикальный размер ядра эрозии слишком велик, у вас действительно нет таких толстых элементов на вашем изображении. –

+0

Итак, это будет случай игры с 'verticalsize = dist.cols()/30' –

Смежные вопросы