PIL

5

ile otomatik kırpma görüntüleri Her görüntüde en az 4 küçük resim bulunan resimler dolu bir klasör var. Python PIL kullanarak daha küçük resimleri nasıl kesebileceğimi bilmeliyim, böylece hepsi bağımsız görüntü dosyaları olarak var olacaklar. Neyse ki bir sabit, arka plan beyaz veya siyah yani ihtiyacım olan şey, satırların veya tercihen tamamen siyah veya tamamen beyaz olan sütunların aranması yoluyla bu görüntüleri kesmenin bir yoludur. İşte bir örnek resim : yukarıdaki resimde itibaren PIL

enter image description here

, 10 ayrı görüntüler, bir sayı içeren her olacaktı. Şimdiden teşekkürler.

DÜZENLEME: Bazı küçük resimlerin arka planlarının içerdikleri görüntünün arka planıyla aynı renkte olması anlamında daha gerçekçi bir örnek resmim var.

enter image description here

olan 13 ayrı görüntüler edilerek, her bir etiketleme için scipy.ndimage kullanma 1 harf

+0

Kırpma üzerinde benzer bir soru daha önce sorulur ... http://stackoverflow.com/questions/1076638/trouble-using-python-pil-library-to-crop-and-save-image Bu kodu, autocrop gibi çalışacak şekilde değiştiren doğru koordinatlara sahip bir döngüye koyabilirsiniz – AurA

+0

Cevabınız için teşekkürler, ancak kırpma kutusu önceden çalışıyor efined x, y coords. Belirttiğim gibi, tek sabit siyah/beyaz tüm sütunları bırakan arka plan rengidir. Bunu elle yapmak, bunu yapmaktan daha kolay olacaktır. –

+0

bir döngü altında koordine edin ve koordinatları temel olarak sol koordinatı tek tek artırın, bu şekilde manuel müdahaleye göre daha hızlı olmasını umuyorum, ayrıca kod hazır olduğunda n sayıda görüntüye uygulayabilirsiniz. – AurA

cevap

1

containng çıkışı:

import numpy as np 
import scipy.ndimage as ndi 
import Image 

THRESHOLD = 100 
MIN_SHAPE = np.asarray((5, 5)) 

filename = "eQ9ts.jpg" 
im = np.asarray(Image.open(filename)) 
gray = im.sum(axis=-1) 
bw = gray > THRESHOLD 
label, n = ndi.label(bw) 
indices = [np.where(label == ind) for ind in xrange(1, n)] 
slices = [[slice(ind[i].min(), ind[i].max()) for i in (0, 1)] + [slice(None)] 
      for ind in indices] 
images = [im[s] for s in slices] 
# filter out small images 
images = [im for im in images if not np.any(np.asarray(im.shape[:-1]) < MIN_SHAPE)] 
+0

Teşekkürler Nicolas, yukarıdaki kod ilk örnek resim üzerinde harika çalışıyor, ne yazık ki yapabilirim ' Ben uzun eklemedim 2. görüntü ile çalışmak için çimdik gibi görünüyor.Herhangi bir tavsiye takdir edilecektir. –