2015-04-20 4 views
6

मैं एक छवि से एक रंग (उदा। # ए 87830) निकालना चाहता हूं, हर दूसरे रंग को सफेद में बदलना चाहता हूं। इनपुट थोड़ा शोर हो सकता है, इसलिए निकटतम रंग के आसन्न पिक्सल शामिल किए जा सकते हैं। आदर्श रूप से अंत में सभी गैर-सफेद पिक्सेल काले रंग में परिवर्तित हो जाएंगे (यानी आउटपुट 1-बिट-गहराई वाली छवि है)।किसी छवि (कमांडलाइन या कोड) से एक रंग को छोड़कर सभी को हटाएं

मैं इस प्रक्रिया को बैच करना चाहता हूं, इसलिए मैं एक छवि मैगिक कमांडलाइन की तरह कुछ उम्मीद कर रहा हूं, या कुछ मैं PHP छविमैजिक एक्सटेंशन का उपयोग करके कोड कर सकता हूं। (मुझे यकीन है कि इमेजमैजिक इसे करने में सक्षम होना चाहिए, अगर सही पैरामीटर सिर्फ काम कर सकते हैं, इसलिए मैंने इसे टैग किया है, लेकिन जब तक यह लिनक्स पर काम करता है, तब तक मैं अन्य सॉफ़्टवेयर के लिए खुला हूं।)

पृष्ठभूमि: मैं ContourTrace कार्यक्रम है, जो अच्छी तरह से इस छवि से दिखाया गया है के लिए पहले पूर्व प्रसंस्करण मंच करने के लिए कोशिश कर रहा हूँ: अगर यह आपके लिए काफी परिष्कृत है

enter image description here

उत्तर

7

यहाँ एक प्रयास करने के लिए है:

convert        \ 
    http://i.stack.imgur.com/rK259.png \ 
-fuzz 33%       \ 
-fill black       \ 
-opaque "#A87830"     \ 
-threshold 12%      \ 
    black+white.png 

-fuzz पैरामीटर सभी रंग मैच है कि रंग -opaque द्वारा परिभाषित की एक निश्चित निकटता के भीतर कर रहे हैं बनाता है। नहीं -fuzz, और आप केवल इन पिक्सेल से मेल खाएंगे जो वास्तव में "#A87830" हैं।

-threshold रंग पिक्सेल को काले या सफेद में परिवर्तित करता है, जहां प्रतिशत सीमा को परिभाषित करता है: ऊपर काला हो जाता है, नीचे सफेद हो जाता है।

black+white.png

आप की विपरीत रंग चयन के अर्थ को +opaque "<color-definition>" को -opaque "<color-definition>" से आदेश को संशोधित कर सकते हैं: यह पिक्सल है कि इस रंग (इस समय नहीं हैं बदल देगा मैं क्रम में -threshold पैरामीटर को छोड़ रंग रखने के लिए):

convert        \ 
    http://i.stack.imgur.com/rK259.png \ 
-fuzz 33%       \ 
-fill black       \ 
+opaque "#FFFFFF"     \ 
    other.png 

other.png

+0

आह! '-ओपैक' से' ओपेक 'में बदलना लगभग वही देता है जो मैं चाहता हूं (काला और सफेद गलत तरीके से गोल हैं, लेकिन मुझे लगता है कि मेरी छवि मैजिक कौशल भी इसे बाहर कर सकती है ...) –

9

सुनिश्चित नहीं हैं। अपने पिक्सेल को समान रूप से कनवर्ट करें, अपने रंग के 30% के भीतर, काले रंग में और फिर बाकी सफेद बनाएं।

convert in.png -fuzz 30% -fill black -opaque "#a87830" -threshold 10% out.png 

enter image description here

आप अधिक टन है कि आप इस

convert in.jpg -fuzz 20% -fill black \ 
    -opaque "#a87830"     \ 
    -opaque "#a6725f"     \ 
    -threshold 1% out.png 

की तरह आगे -opaque आदेशों को जोड़ने के लिए, आप कम करने के लिए अनुमति दे सकता है जिसके द्वारा काला बनना चाहते हैं "में जोड़ने" कर सकते हैं fuzz और इस प्रकार अन्य टोन को हटा दें जिन्हें आप नहीं चाहते हैं।

+0

धन्यवाद! आपकी कमांडलाइन में 30% और 10% के अलग-अलग अर्थ क्या हैं? मैं उम्मीद कर रहा था कि "एक समान रंग की अनुमति दें, लेकिन केवल लक्ष्य रंग के पिक्सेल के समीप" के अर्थ के साथ कुछ होगा। यह जेपीईजी/स्कैनर अस्पष्टता की अनुमति देगा, लेकिन आपके उदाहरण में काले और बैंगनी रेखाएं शामिल नहीं हैं। –

+0

30% का अर्थ है * '87830' के मूल्य से * रंग दूरी के संदर्भ में 30% के भीतर पिक्सेल का चयन करें"।10% पर दहलीज का मतलब है कि 25,25,25 (यानी 255 का 10%) से कम आरजीबी वाक्यू के साथ सभी पिक्सेल सेट करें और उस मूल्य के ऊपर वाले सभी सफेद रंग के लिए सेट करें। तो आउटपुट छवि शुद्ध काले और सफेद होगी। –

+0

मुझे पता है कि अगर मैं दोनों फ़ज़ और थ्रेसहोल्ड को 1% तक कम करता हूं तो भी मुझे मूल से सभी ब्लैक लाइन मिलती हैं। (केवल भूरे रंग की रेखाएं रखी जानी चाहिए, इसलिए काले रेखाओं को सब कुछ की तरह सफेद पर जाना चाहिए।) –

संबंधित मुद्दे