5

के साथ ऑटो-क्रॉपिंग छवियां मेरे पास छवियों से भरा फ़ोल्डर है जिसमें प्रत्येक छवि के साथ कम से कम 4 छोटी छवियां हैं। मुझे पता चलेगा कि मैं पाइथन पीआईएल का उपयोग करके छोटी छवियों को कैसे हटा सकता हूं ताकि वे सभी स्वतंत्र छवि फ़ाइलों के रूप में मौजूद हों। सौभाग्य से एक स्थिर है, पृष्ठभूमि या तो सफेद या काला है, इसलिए मैं अनुमान लगा रहा हूं कि मुझे इन छवियों को पंक्तियों या अधिमानतः कॉलम की खोज करके कटौती करने का एक तरीका है जो पूरी तरह से काला या पूरी तरह से सफेद हैं, यहां एक उदाहरण छवि है :पीआईएल

enter image description here

ऊपर छवि से, वहाँ 10 अलग छवियों, प्रत्येक एक नंबर युक्त होगा। अग्रिम में धन्यवाद।

संपादित करें: मेरे पास एक और नमूना छवि है जो इस अर्थ में अधिक यथार्थवादी है कि कुछ छोटी छवियों की पृष्ठभूमि उसी छवि के पृष्ठभूमि के समान रंग है, जिसमें वे शामिल हैं। उदा।

enter image description here

उत्पादन जिनमें से 13 अलग छवियों जा रहा है, प्रत्येक 1 पत्र

+0

फसल पर ऐसा ही एक सवाल से पहले कहा जाता है ... http://stackoverflow.com/questions/1076638/trouble-using-python-pil-library-to-crop-and-save-image आप उस कोड को एक लूप में सही निर्देशांक के साथ डाल सकते हैं जो इसे ऑटोक्रॉप की तरह काम करने के लिए बदलता है – AurA

+0

उत्तर के लिए धन्यवाद लेकिन फसलबॉक्स पूर्व से काम करता है efined एक्स, वाई coords। जैसा कि मैंने कहा, ब्लैक/व्हाइट के पूरे कॉलम को छोड़कर पृष्ठभूमि रंग केवल स्थिर रंग है। इसे मैन्युअल रूप से करने के लिए तेज़ी से करना होगा, ऐसा करना होगा। –

+0

कुछ लूप के नीचे डाल दिया गया है और समन्वय को समान रूप से मूल रूप से बाएं समन्वय में वृद्धि करता है, इस तरह से मुझे उम्मीद है कि यह मैन्युअल हस्तक्षेप से तेज़ है, कोड तैयार होने के बाद भी आप इसे छवियों की संख्या में लागू कर सकते हैं। – AurA

उत्तर

1

लेबलिंग के लिए scipy.ndimage का उपयोग containng:

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

धन्यवाद निकोलस, उपरोक्त कोड पहली उदाहरण छवि पर बहुत अच्छा काम करता है, दुर्भाग्य से मैं' मुझे दूसरी छवि के साथ काम करने के लिए tweak लगता है कि मैंने लंबे समय तक नहीं जोड़ा है। किसी भी सलाह की सराहना की जाएगी। धन्यवाद। –