दिलचस्प पोस्ट
छवियों में सरल रोशनी सुधार openCV c ++ दो डेटा फ्रेम को पंक्तियों (आरबीआईएन) से जोड़ते हैं, जब उनके पास अलग-अलग कॉलम हैं * आर्ग्स और ** क्वार्ग क्या मतलब है? क्या SQLite के लिए कोई .NET / C # wrapper है? बिल्ड-इन प्रकार के लिए std :: map डिफ़ॉल्ट मान कॉपी निर्माता में असाइनमेंट ऑपरेटर को कॉल करना कोणीय जेएस आवेदन के लिए प्रक्षेपक में एनिमेशन को अक्षम कैसे करें संख्याओं के एक संग्रह के मध्य खोजने के लिए ओ (एन) एल्गोरिथ्म मैं jQuery एनीमेशन का उपयोग कर पृष्ठभूमि की छवि कैसे बदलूं? हस्ताक्षरित चारों से हस्ताक्षरित अक्षरों में परिवर्तित और वापस फिर से? चेतावनी: mysqli_real_escape_string () बिल्कुल 2 मापदंडों की उम्मीद है, 1 दिया … मैं क्या गलत करता हूँ? कन्स्ट्रक्टर के बिना ऑब्जेक्ट इन्सेंट बनाएं? क्या मैं shared_ptr या unique_ptr का उपयोग करना चाहिए जावा स्विंग: गतिशील तरीके से जीयूआई को कैसे बदला जाए आधार 10 नंबर को किसी भी आधार को एनएटी में कनवर्ट करने का सबसे तेज़ तरीका है?

स्मृति में MATLAB आंकड़े प्रस्तुत करना

आगे की प्रक्रिया के लिए एक रेखापुंज छवि पर एक आकृति की सामग्री को सहेजने के लिए getframe और saveas का उपयोग करने के लिए कोई विकल्प हैं?

दृष्टिकोण 1: getframe

 h = figure('visible', 'off'); a = axes('parent', h); % render using `scatter3()` or other plot function. content = frame2im(getframe(h)); 

इसे प्राप्त करने के लिए कॉल में एक स्क्रीन कैप्चर करने के लिए आंकड़ा दिखाने में गंभीर दोष है getframe() और यह एक लूप में ऐसी रेंडर करते समय समस्याग्रस्त है (यानी वीडियो फ़्रेम के रूप में प्रत्येक पुनरावृत्ति पर content को सहेजना)।

दृष्टिकोण 2: saveas

 h = figure('visible', 'off'); a = axes('parent', h); % render using `scatter3()` or other plot function. saveas(h, '/path/to/file.png'); content = imread(/path/to/file.png'); 

इस दृष्टिकोण में डिस्क पर लिखने का गंभीर दोष है, जो बहुस्तृत अनुप्रयोगों में समस्याग्रस्त है, साथ ही स्मृति को सीधे रेंडर करने से धीमी है। चूंकि saveas() स्पष्ट रूप से पीएनजी एनकोडर को लागू करने से पहले मेमोरी में रेंडर करेगा, मैं जो चाहता हूं वह संभव है, लेकिन मुझे MATLAB प्रलेखन में कोई भी कार्य नहीं मिल सकता है, जो केवल रेंडरिंग पार्ट को करता है।

प्रश्न :

क्या आप रेफर करने वाली छवि में मनमानाए axes की सामग्री को प्रस्तुत करने का एक वैकल्पिक तरीका जानते हैं?

Solutions Collecting From Web of "स्मृति में MATLAB आंकड़े प्रस्तुत करना"

यदि आप avifile साथ एक AVI फ़ाइल avifile , और उसके बाद addframe साथ इसे फ्रेम addframe , तो MATLAB अतिरिक्त दृश्यमान आंकड़े नहीं खोलता है जैसे कि इसे getframe साथ करता है

 avi = avifile('/path/to/output'); figure_handle = figure('visible', 'off'); % ... for something = 1:1000 cla % (draw stuff...) avi = addframe(avi, figure_handle); end 

मुझे पता है यह एक पुराना धागा है, लेकिन मैं हाल में इस समस्या में फिर से चला गया, इसलिए मैं अपने निष्कर्षों को संक्षेप करना चाहता था मेरा मुख्य स्रोत यह पृष्ठ है ( कैश्ड ) इसके अनुसार, तीन विकल्प हैं:

  1. आंकड़े हैंडल के साथ ADDFRAME का उपयोग सीधे ( GETFRAME का उपयोग किए बिना)। यह वास्तव में @rescdsk ने अपने जवाब में दिखाया है।

     hFig = figure('Visible','off'); aviobj = avifile('file.avi'); for k=1:N %#plot(...) aviobj = addframe(aviobj, hFig); end aviobj = close(aviobj); 
  2. छवि फ़ाइल में आंकड़ा निर्यात करने के लिए प्रिंट / SAVEAS / HGEXPORT का उपयोग करके, डिस्क से वापस छवि को पढ़ना। यह दृष्टिकोण # 2 है जो आपने ऊपर दिए सवाल में खुद को सूचीबद्ध किया है।

     hFig = figure('Visible','off'); set(hFig, 'PaperPositionMode','auto', 'InvertHardCopy','off') aviobj = avifile('file.avi'); for k=1:N %#plot(...) print(['-f' num2str(hFig)], '-zbuffer', '-r0', '-dpng', 'file.png') img = imread('file.png'); aviobj = addframe(aviobj, im2frame(img)); end aviobj = close(aviobj); 
  3. इन-मेमोरी आकृति को कैप्चर करने के लिए undocumented hardcopy फ़ंक्शन का उपयोग करना

     hFig = figure('Visible','off'); set(hFig, 'PaperPositionMode','auto') aviobj = avifile('file.avi'); for k=1:N %#plot(...) img = hardcopy(hFig, '-dzbuffer', '-r0'); aviobj = addframe(aviobj, im2frame(img)); end aviobj = close(aviobj); 

    वास्तव में, यह अंतर्निहित कार्य है जो अन्य फ़ंक्शन प्रत्यक्ष या अप्रत्यक्ष रूप से उपयोग करते हैं। जहां संभव हो वहां स्रोत कोड का निरीक्षण करके, यहां संबंधित कार्यों की निर्भरता का एक उदाहरण दिया गया है, जहां A --> B कॉलल्स A calls B :

     saveas [M-file] --> print [M-file] --> render [private M-file] --> hardcopy [P-file] hgexport [P-file] --> print [M-file] --> ... @avifile/addframe [M-file] --> hardcopy [P-file] 

    दूसरी ओर, GETFRAME हार्डकी नहीं बुलाता है, लेकिन कैप्चरस्क्रीन नामक एक गैर-दस्तावेज अंतर्निर्मित फ़ंक्शन (हालांकि ऐसा लगता है कि यह आगामी एचजी 2 सिस्टम के लिए प्रिंट का उपयोग करेगा जहां एक नया -RGBImage प्रिंट फ्लैग है):

     getframe [M-file] --> capturescreen [builtin] 

ध्यान दें: चूंकि AVIFILE को अब बहिष्कृत कर दिया गया है, आप इसे (2) और (3) में नए वीडियॉरिटर के साथ बदल सकते हैं, लेकिन (1) में नहीं क्योंकि यह आंकड़े संभाल सीधे सीधा समर्थन नहीं करता।

हेडलेस मोड में MATLAB प्रारंभ करें: matlab -noFigureWindows

MATLAB निर्बाध मोड में चल रहा है। चित्रा विंडो प्रदर्शित नहीं की जाएगी।

तो बस साजिश और सामान्य रूप में आंकड़े बचाओ (आप पाठ्यक्रम के किसी भी ग्राफिकल आउटपुट नहीं देखेंगे)। उदाहरण:

 surf(peaks); print output.eps %# SAVEAS works as well close 

मैं ऊपर R2010a चलने वाली एक विंडोज मशीन पर परीक्षण किया मेरे पास अभी यूनिक्स मशीन तक पहुंच नहीं है, लेकिन मैंने अतीत में एक समान प्रश्न का उत्तर दिया, और यह उस समय ठीक काम किया (आपको MATLAB शुरू करने से पहले $DISPLAY चर को सेट करने की आवश्यकता होगी)


संपादित करें

एक अन्य विकल्प, यदि आप अपने सामान्य कार्यस्थान को रखना चाहते हैं, तो पृष्ठभूमि में एक नया MATLAB आवृत्ति शुरू करना है जो भूखंडों ( स्रोत ) को उत्पन्न और सहेजेंगे।

इसे अपने वर्तमान MATLAB सत्र (सभी एक ही पंक्ति पर) की कमांड प्रॉम्प्ट से चलाएं:

 !start /B /MIN matlab -noFigureWindows -automation -r "cd('c:\yourpath'); myscript; quit" 

यह पृष्ठभूमि में एक नया MATLAB सत्र शुरू करेगी (COM Automation का उपयोग करके), और एक स्क्रिप्ट को निष्पादित करेगी जिसका नाम myscript (एक सरल एम-फाइल) है, जिसमें आपकी सभी साजिश रचने शामिल हैं:

c: \ yourpath \ myscript.m

 surf(peaks); saveas(gcf, 'output.eps'); 

avifile होने के साथ, यह है कि आप इसे VideoWriter के साथ करते हैं:

 hFig = figure('Visible','off'); set(hFig, 'PaperPositionMode','auto') aviobj = VideoWriter('file','Archival'); for k=1:N %#plot(...) img = hardcopy(hFig, '-dzbuffer', '-r0'); writeVideo(aviobj, im2frame(img)); end close(aviobj);