2012-11-29 15 views
7

के रूप में एक ही आकार मैं इस समोच्च matplotlib के साथ प्राप्त किया है की छवि के लिए:Convert समोच्च (matplotlib या OpenCV) मूल

Contour

अब, मैं एक सामान्य अजगर छवि के रूप में उपयोग करना चाहते हैं (जनहित याचिका या सरणी), क्योंकि मैं इसे एक मुखौटा (ओपनसीवी के साथ प्राप्त) लागू करना चाहता हूं।

समस्या यह है कि MatplotLib के साथ, समोच्च के साथ छवि का आकार बदल जाता है, और एक मार्जिन जोड़ा जाता है (धुरी के लिए, भले ही मैं धुरी नहीं खींचता), इसलिए छवि जो मैं प्राप्त करता हूं MatplotLib ओपनसीवी के साथ प्राप्त मास्क के साथ फिट नहीं है।

मैंने ओपनसीवी के साथ एक ही समोच्च प्राप्त करने की कोशिश की, लेकिन मुझे सीवी 2 के साथ कोई परिणाम नहीं मिला। फाइंडकंटोर और सीवी 2.ड्राकंटोरस फ़ंक्शन (यदि आप जानते हैं कि इसे कैसे करना है, तो कृपया मुझे बताएं ... में यह previous topic आप मूल छवि और समोच्च जो मुझे चाहते हैं) देख सकते हैं

एक और संभावित समाधान MatplotLib के साथ प्राप्त छवि को एक छवि (पीआईएल या सरणी) में मूल रूप से उसी आकार के साथ कनवर्ट करना होगा, और बिना मार्जिन।

मुझे उम्मीद है कि आप कम से कम इन समाधानों में से एक के साथ मेरी मदद कर सकते हैं!

--------------------------- संपादित करें ------------------ ---------

रटर कासिस का जवाब सही है। यह मेरे लिए काम कर रहा था क्योंकि मैं इस लाइन में लिखा था ...

ax = plt.axes([0, 0, 1, 1], frame_on=False, xticks=[], yticks=[]) 

... समोच्च समारोह उपयोग करने के बाद, और यह समोच्च समारोह उपयोग करने से पहले किया जाना चाहिए। यह याद रखना!

उत्तर

4

मैंने एक बार सवाल पोस्ट किया कि आप एक छवि को कैसे बना सकते हैं .imshow और इसे फिर से सहेजें ताकि यह इनपुट छवि के बराबर होगा।

from PIL import Image 

im = np.array(Image.open('input_image.jpg').convert('L')) 

xpixels = im.shape[1] 
ypixels = im.shape[0] 

dpi = 72 
scalefactor = 1 

xinch = xpixels * scalefactor/dpi 
yinch = ypixels * scalefactor/dpi 

fig = plt.figure(figsize=(xinch,yinch)) 

ax = plt.axes([0, 0, 1, 1], frame_on=False, xticks=[], yticks=[]) 

contour(im, levels=[240], colors='black', origin='image') 

plt.savefig('same_size.png', dpi=dpi) 
+0

यह राज्य मशीन इंटरफेस के बजाय OO इंटरफ़ेस का उपयोग करने के लिए बेहतर शैली होगा: प्रतिसाद देने मुझे मिल गया अपने मामले में मददगार हो सकता है, यह आप एक ही आयामों के साथ contour'ed छवि को बचा सकता है कैसे है। यानी 'सी = ax.contour (...)' और 'fig.savefig (...)' – tacaswell

+0

मैं पूरी तरह से सहमत हूं, ओओ शैली निश्चित रूप से बेहतर है। यह कोड मूल रूप से उल्लिखित 'पिछली' पोस्ट में कोड का एक संशोधन था जहां मैं मूल कोड के करीब चिपकने का इरादा रखता था। –

+0

@Rutger Kassies आपके उत्तर के लिए धन्यवाद। कृपया, प्रश्न में मेरा संपादन देखें। मुझे नहीं पता कि अभी भी मार्जिन क्यों है। – Xithias