2016-05-01 6 views
0

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

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

(Аналогичный вопрос был задан вопрос here, но ответ весьма расплывчатым и не знаю, как реализовать это в моем коде)

Вот мой код:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.patches as mpatches 
from scipy.misc import imread,imresize 
from skimage.segmentation import clear_border 
from skimage.morphology import label 
from skimage.measure import regionprops 


image = imread('./adobe.png',1) 

#apply threshold in order to make the image binary 
bw = image < 120 

# remove artifacts connected to image border 
cleared = bw.copy() 
clear_border(cleared) 

# label image regions 
label_image = label(cleared,neighbors=8) 
borders = np.logical_xor(bw, cleared) 
label_image[borders] = -1 

print label_image.max() 

fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(6, 6)) 
ax.imshow(bw, cmap='jet') 



for region in regionprops(label_image, ['Area', 'BoundingBox']): 
    # skip small images 
    if region['Area'] > 50: 

     # draw rectangle around segmented coins 
     minr, minc, maxr, maxc = region['BoundingBox'] 
     rect = mpatches.Rectangle((minc, minr), maxc - minc, maxr - minr, 
           fill=False, edgecolor='red', linewidth=2) 
     ax.add_patch(rect) 

plt.show() 

Если я не достаточно ясно, пожалуйста, комментарий и я постараюсь уточнить мое самое лучшее,

Спасибо

ответ

3

Вопрос, который вы ссылаетесь, использует findContours из OpenCV, общей библиотеки для обработки изображений. Если у вас уже есть прямоугольник (в х, у и ширина, высота), то вы можете просто экспортировать с помощью Matplotlib или, в качестве альтернативы OpenCV:

image_patch = img[minr:maxr, minc:maxc] # get region of interest (slice) 
# .. maybe do some scaling 
plt.imsave("filename.png", image_patch) 

В качестве альтернативы с fig.savefig (путь) после предоставления его к фигура. Или с OpenCV:

import cv2 
cv2.imsave("path.png", img_patch) 

Вы можете добавить суффиксы в именах файлов (и/о проверке, если файл уже существует?), Чтобы избежать перезаписи.

+0

Привет, спасибо за ваш ответ. Я поставил две первые строки кода, которые вы предложили в моем цикле for, теперь он сохраняет изображения, однако область, которую она сохраняет, является неправильной. Я получаю несколько сохраненных букв, но также сохраняется много частичных и просто пробелов. Я думаю, что ваш код прав, но я не знаю, как получить точные границы, преобразованные в формат [minc: maxc, minr: maxr], любые предложения? – Zack

+0

извините, конечно, его строки, а затем столбцы. Я зафиксировал его в примере. Если вы можете предоставить подходящее тестовое изображение, я смогу его протестировать (если ваш фрагмент кода завершен). – user3736966

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