2016-05-01 12 views
0

Ich habe etwas Python-Code, der ein Bild eines A4-Buchstabens aufnimmt und dann um jedes Zeichen Begrenzungsrahmen zeichnet.Begrenzungsrahmen als Bild speichern

Ich möchte wissen, wie man jede Bounding Box als ein Bild speichert, also nimmt es im Wesentlichen jedes ermittelte Zeichen und speichert es. Bevorzugt als .png 20x20 Größe veränderte

(Eine ähnliche Frage wurde gefragt, here aber die Antwort ist recht vage und nicht wissen, wie es in meinem Code zu implementieren)

Hier ist mein Code:

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() 

Wenn ich nicht klar genug bin, bitte Kommentar und ich werde versuchen, mein Bestes erarbeiten,

Danke

Antwort

3

Die von Ihnen referenzierte Frage verwendet findContours von OpenCV, einer allgemeinen Bibliothek für die Bildbearbeitung. Wenn Sie bereits den Begrenzungsrahmen haben (y und Breite, Höhe in x,), dann können Sie einfach alternativ opencv mit matplotlib oder exportieren:

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

mit fig.savefig (Pfad) Alternativ, nachdem sie auf ein Rendering Zahl. Oder mit opencv:

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

Möglicherweise möchten Sie Suffixe, Dateinamen (und/o Prüfen, ob die Datei bereits vorhanden?) Hinzufügen Überschreiben zu vermeiden.

+0

Hallo ich danke für Ihre Antwort, ich habe die beiden ersten Zeilen des Codes, die Sie in meiner for-Schleife vorgeschlagen, es speichert jetzt Bilder aber der Bereich, den es speichert, ist irgendwie falsch. Ich bekomme ein paar Briefe gespeichert, aber auch eine Menge partielle und nur Leerzeichen gespeichert. Ich denke, dass dein Code richtig ist, aber ich weiß nicht, wie man die genauen Grenzen in das Format konvertiert [minc: maxc, minr: maxr], irgendwelche Vorschläge? – Zack

+0

sorry, natürlich seine Reihen, dann Spalten. Ich habe es im Beispiel behoben. Wenn Sie ein geeignetes Testbild zur Verfügung stellen können, kann ich es testen (sofern Ihr Code-Snippet vollständig ist). – user3736966