2017-01-28 5 views
1

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

enter image description here

Это пример изображения, как я не могу отправить исходное изображение. Каждое изображение имеет область с текстурой, чистый белый водяной знак (pos) и много нежелательного черного пространства.

В идеале это изображение должно быть обрезана до:

enter image description here

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

Изображения могут выглядеть совсем иначе, вот еще один пример

enter image description here

это один только нуждается в кадрирования на левой

enter image description here

еще одно:

enter image description here

это одна должна быть обрезана сверху и снизу:

enter image description here

и еще один

enter image description here

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

вот фотография водяного знака, как это выглядит на самом деле.

enter image description here

Изображения различаются по размеру, но, как правило, большие (более 2000x2000).

Я ищу решение в python (возможно, cv2).

моя первая идея состояла в том, чтобы использовать что-то вроде этого: Python & OpenCV: Second largest object

но это решение код не для меня

+0

Посмотрите здесь ... http://stackoverflow.com/a/41761313/2836621 –

+2

Покажите, что вы сделали до сих пор. – miindlek

+0

@MarkSetchell благодарит Марка, ваше решение отличное и работает, но теперь я понял, что мне нужна обработка изображений «на лету», и это нужно сделать в python. – spore234

ответ

0

Я работаю в C# и C++ и не работает в Python, но может предложить вам логику ,

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

Поскольку вы сказали, что нежелательная часть изображения всегда черная, просто прочитайте значения пикселей в обоих сканированиях. Если цвет всех пикселей в определенной строке является черным, вы можете удалить или удалить эту строку. Аналогичные шаги могут выполняться для сканирования столбцов.

Теперь мы не можем просто легко собрать строки и столбцы, поэтому просто запишите избыточные строки и столбцы, а затем вы можете обрезать свое изображение, используя следующий код :(Я буду писать код на C# с помощью библиотеки emgucv, но это легко сделать понять для python)

Mat original_image = new Mat(); 
Rect ROI = new Rect(x,y,width,height); 
Mat image_needed_to_crop = new Mat(original_image,ROI); 

Этот код просто извлекает только интересующую область от исходного изображения.

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