У меня есть много изображений с текстом и без текста, похожего на изображение выше. Я хочу удалить линии по краям, а также удалить шум, если таковые имеются на изображении.
Эти строки присутствуют только по краям, так как я обрезал эти изображения из таблицы.
Вы можете попробовать следующий подход. Но я не могу гарантировать, что все строки в вашем файле изображения могут быть удалены.
Сначала определите все линии, присутствующие на изображении, применяя 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, столбцы) — справа от изображения
(так как ваше изображение уже размыто, сглаживание, эрозия и расширение могут не сработать)
Если ваши изображения одинаковы, просто обрежьте дно с помощью OpenCV …
альтернативно эта ссылка демонстрирует, как удалить черные границы с изображения.
Для того, чтобы очистить текст, вы можете попробовать шумодав