Используйте Python / PIL или аналогичный для сокращения пробелов - PullRequest
4 голосов
/ 22 февраля 2012

Есть идеи, как использовать Python с модулем PIL, чтобы уменьшить выделение всего?Я знаю, что это может быть достигнуто с Gimp.Я пытаюсь упаковать свое приложение как можно меньше, установка GIMP не подходит для ЕС.

Допустим, у вас есть 2 изображения, одно из которых 400x500, а другое 200x100.Они оба белого цвета с текстовым блоком 100x100 где-то в границах каждого изображения.То, что я пытаюсь сделать, - это автоматически обрезать пропуски вокруг этого текста, загрузить текстовый блок изображения 100x100 в переменную для дальнейшего извлечения текста.

Это, очевидно, не так просто, так что просто запустите извлечение текста в целомизображение не будет работать!Я просто хотел спросить об основном процессе.По этой теме в Google мало что доступно.Если решить, возможно, это может помочь кому-то еще ...

Спасибо за чтение!

Ответы [ 3 ]

8 голосов
/ 22 февраля 2012

Если вы поместите изображение в массив numpy, просто найти края, которые вы можете использовать PIL для обрезки.Здесь я предполагаю, что пробел - это цвет (255,255,255), вы можете настроить его под свои нужды:

from PIL import Image
import numpy as np

im = Image.open("test.png")
pix = np.asarray(im)

pix = pix[:,:,0:3] # Drop the alpha channel
idx = np.where(pix-255)[0:2] # Drop the color when finding edges
box = map(min,idx)[::-1] + map(max,idx)[::-1]

region = im.crop(box)
region_pix = np.asarray(region)

Чтобы показать, как выглядят результаты, я оставил надписи на осях, чтобы вы моглисм. размер box региона:

from pylab import *

subplot(121)
imshow(pix)
subplot(122)
imshow(region_pix)
show()

enter image description here

1 голос
/ 22 февраля 2012

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

0 голосов
/ 22 февраля 2012

http://blog.damiles.com/2008/11/basic-ocr-in-opencv/

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

...