Удаление границ в opencv и переполнении стека

введите описание изображения здесь

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

Эти строки присутствуют только по краям, так как я обрезал эти изображения из таблицы.

1

Решение

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

Сначала определите все линии, присутствующие на изображении, применяя Hough Transform

vector<Vec2f> lines;
HoughLines(img, lines, 1, CV_PI/180, 100, 0, 0 );

Затем переберите каждую обнаруженную строку,

Получить размер изображения

#you may have laoded image to some file
#such as
#  Mat img=imread("some_file.jpg");
int rows=img.rows;
int colms=img.cols;
Point pt3;

теперь вы знаете размер матрицы, затем получите центральную точку линии, вы можете сделать это, как показано ниже,

for( size_t i = 0; i < lines.size(); i++ )

{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
pt3.x=(pt1.x+pt2.x)/2;
pt3.y=(pt1.y+pt2.y)/2;

***
//decide whether you want to remove the line,i.e change line color to
// white or not

line( img, pt1, pt2, Scalar(255,255,255), 3, CV_AA); // if you want to change
}

*** Когда у вас есть и центральная точка, и размер изображения, вы можете сравнить положение центральной точки слева, справа, сверху, снизу. Вы можете сделать это, сравнив со следующим. Не используйте (==) разрешить некоторую разницу.
1. (0, cols / 2) — верх изображения,
2. (ряды / 2,0) — слева от изображения,
3. (строки, столбцы / 2) — нижняя часть изображения
4. (строки / 2, столбцы) — справа от изображения

(так как ваше изображение уже размыто, сглаживание, эрозия и расширение могут не сработать)

2

Другие решения

Если ваши изображения одинаковы, просто обрежьте дно с помощью OpenCV …

альтернативно эта ссылка демонстрирует, как удалить черные границы с изображения.

Для того, чтобы очистить текст, вы можете попробовать шумодав

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector