2016-05-07 3 views
-1

Я хочу, чтобы нарисовать квадрат boundery вокруг текста, как показано на рисунке Image 2 Image 1. Может ли кто-нибудь предложить мне хороший способ сделать это, или какой-нибудь алгоритм или что-нибудь еще?Извлечь изображение2 из изображения 1

+0

Как это происходит? –

ответ

-1

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

Например, если вы используете Matlab, это может выглядеть следующим образом:

  1. Use 'найти', чтобы определить, не фоновых пикселей (например, linearIndices = найти (~ (image1 == фон)), где фон либо жестко закодированный набор значений RGB, соответствующих фоновым пикселям, либо набор значений RGB, идентифицированных режимом изображения.
  2. «Найти» вернет линейные индексы, а не индексы (т.е. нижний правый угол матрицы 3x3 равен 9, а не [3,3]), поэтому используйте «ind2sub» для преобразования в индексы (например, [I, J] = ind2sub (imageSize, linearIndices)
  3. Используйте 'max' и 'min' для поиска диапазона в x и y (например, rangeX = [min (I) max (I); rangeY = [min (J) max (J)])
  4. Изменить пиксели вдоль минимальных и максимальных индексов на цвет границы. Например, image1 (rangeX (1), rangeY (1): rangeY (2)) = boxColour (где boxColour - это значения RGB того цвета, который вы хотите, чтобы поле было) будет рисовать левую границу поля. Повторите этот процесс для трех других границ, и все готово.

Конечно, этот подход работает только в том случае, если фон полностью однородный. Он также предполагает, что вы хотите только нарисовать границу шириной в один пиксель. Хотя рекомендации по функциям конкретно соответствуют функциям Matlab, мыслительный процесс, лежащий в основе этих функций, может быть перенесен в другое место.

+0

На самом деле, я хочу нарисовать рамку с рамкой вокруг текста в изображении 1, как показано на изображении 2. –

+0

объект является однородным. –

+0

background is unifrom –

0

Как вы не предложили инструмент, я буду использовать ImageMagick прямо в командной строке, поскольку он установлен на большинстве дистрибутивов Linux и доступен для OSX и Windows. Он также имеет привязки PHP, Perl, Python и .Net.

Так как ваш фон однороден (МОГ), вы можете просто использовать trim обрезать ее:

convert image.jpg -fuzz 20% -trim result.jpg 

enter image description here

Теперь вы можете добавить границу, как это:

convert result.jpg -bordercolor black -border 5 result.jpg 

enter image description here

Exc Если вы хотите сохранить другой серый фон, чтобы он не работал для вас.Таким образом, вместо того, чтобы на самом деле обрезки, мы можем спросить ImageMagick где «бы» подрезать, но на самом деле не сделать это следующим образом:

convert image.jpg -fuzz 20% -format %@ info: 
81x22+1+14 

Итак, мы знаем, что это будет сделать коробку 81x22px начиная с 1 пиксель из левая и 14 пикселей сверху вниз, так что мы просто нарисовать прямоугольник там вместо подрезки:

convert image.jpg -fill none -stroke black -draw "rectangle 1,14 82,36" result.jpg 

enter image description here

Или, если вы хотите, чтобы контур жирнее:

convert image.jpg -fill none -stroke black -strokewidth 5 -draw "rectangle 1,14 82,36" result.jpg 

enter image description here

+0

m с помощью Visual Studio –

+0

Не нужно писать код действительно. Вы можете просто ввести эти две строки в 'Командная строка' - в' Start'-> 'Programs'->' Accessories'. –

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