2009-12-04 5 views
9

मैं एक छवि दिखाना चाहता हूं और उस पर कुछ साजिश करना चाहता हूं और फिर उसे मूल आकार के समान आकार वाली छवि के रूप में सहेजना चाहता हूं। मेरे MATLAB कोड है:मैं प्लॉट की गई छवि को कैसे सहेजूं और MATLAB में मूल छवि आकार को कैसे बनाए रखूं?

figH = figure('visible','off'); 
imshow(I); 
hold on; 
% plot something 
saveas(figH,'1','jpg'); 
close(figH); 

लेकिन जिसके परिणामस्वरूप छवि "1.jpg" साजिश के साथ ही छवि में गैर-छवि क्षेत्रों को बचाया है। इस समस्या का समाधान किस प्रकार से किया जा सकता है?

+0

कितना बड़ा? महत्ता का क्रम? एक छोटा प्रतिशत? – Doresoom

+0

क्षमा करें, मेरा मतलब साजिश में गैर-छवि क्षेत्र को सहेजना नहीं है। – Tim

उत्तर

14

कारण अपनी नई छवि बड़ा अपने मूल है से SAVEAS समारोह की बचत होती है क्योंकि पूरे आंकड़ा खिड़की ही नहीं, कुल्हाड़ियों की सामग्री (जो जहां अपनी छवि को प्रदर्शित किया जाता है) है।

आपका प्रश्न बहुत एक और SO question के समान है, इसलिए मैं पहले दो प्राथमिक विकल्प उन जवाब से घिरा आपको बताएंगे:

  • कच्चे छवि डेटा संशोधित करें: आपकी छवि डेटा में संग्रहित है परिवर्तनीय I, तो आप I में छवि पिक्सेल मानों को सीधे संशोधित कर सकते हैं और IMWRITE का उपयोग कर संशोधित छवि डेटा को सहेज सकते हैं। आप इसे कैसे कर सकते हैं my answer और LiorH's answer में वर्णित हैं। यह विकल्प छवि के सरल संशोधनों के लिए सबसे अच्छा काम करेगा (जैसे एक आयत जोड़ना, क्योंकि उस प्रश्न से संबंधित था)।

  • संशोधित करें कि आंकड़ा कैसे सहेजा गया है: आप यह भी संशोधित कर सकते हैं कि आप आकृति को कैसे सहेजते हैं ताकि यह आपकी मूल छवि के आयामों से बेहतर मेल खा सके। आप इसे कैसे कर सकते हैं (PRINT और GETFRAME SAVEAS के बजाय फ़ंक्शंस का उपयोग करके) Azim, jacobko, और SCFrench के उत्तरों में वर्णित हैं। यह विकल्प वह है जो आप करना चाहते हैं यदि आप पाठ लेबल, तीर, या अन्य शामिल प्लॉट ऑब्जेक्ट्स के साथ छवि को ओवरले कर रहे थे।

पूरे आंकड़े को सहेजकर दूसरे विकल्प का उपयोग करना मुश्किल हो सकता है। विशेष रूप से, यदि आप एक छोटी छवि (700-बाय -700 पिक्सल कहें) में एक बड़ी छवि (1024-बाय-1024 पिक्सल कहें) की साजिश कर रहे थे तो आप छवि रिज़ॉल्यूशन खो सकते हैं। समायोजित करने के लिए आपको आकृति और अक्ष गुणों को सेट करना होगा। यहाँ एक उदाहरण समाधान है:

I = imread('peppers.png');  %# Load a sample image 
imshow(I);      %# Display it 
[r,c,d] = size(I);    %# Get the image size 
set(gca,'Units','normalized','Position',[0 0 1 1]); %# Modify axes size 
set(gcf,'Units','pixels','Position',[200 200 c r]); %# Modify figure size 
hold on; 
plot(100,100,'r*');    %# Plot something over the image 
f = getframe(gcf);    %# Capture the current window 
imwrite(f.cdata,'image2.jpg'); %# Save the frame data 

उत्पादन छवि image2.jpg उस पर एक लाल तारांकन होना चाहिए और इनपुट छवि के रूप में एक ही आयाम होना चाहिए।

+0

धन्यवाद, gnovice, मैंने Azim की विधि की कोशिश की। Nonimage क्षेत्र चला गया है लेकिन सहेजी गई छवि मूल छवि की तुलना में अलग संकल्प है। क्या इसे हल किया जा सकता है? सादर! – Tim

+0

@ टिम: मैंने मूल रूप से अज़ीम और एससीफ़्रेंच के सुझावों को संयुक्त किया और ऊपर दिए गए मेरे उत्तर में एक नया समाधान जोड़ा। उम्मीद है कि आपके लिए चीजों का ख्याल रखेगा। – gnovice

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

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