2012-06-02 24 views
9

से पिक्सेल-बाय-पिक्सेल डेटा प्राप्त करें मुझे AVFoundation और उसके कैप्चर समर्थन (हालांकि बहुत परिचित नहीं है) से अवगत है। हालांकि, मुझे पिक्सेल-बाय-पिक्सेल डेटा (आरजीबी-प्रति-पिक्सेल या इसी तरह) प्राप्त करने के लिए कोई आसानी से सुलभ एपीआई नहीं दिखाई देती है। मुझे दस्तावेज़ों में पढ़ना याद है कि यह संभव है, लेकिन मैं वास्तव में नहीं देखता हूं। तो:आईओएस: कैमरा

  1. क्या यह किया जा सकता है? यदि हां, तो कैसे?
  2. क्या मुझे कच्चे छवि डेटा या डेटा जेपीईजी-संपीड़ित किया जा रहा है?

उत्तर

31

एवी फाउंडेशन आपको वीडियो या अभी भी कैमरे द्वारा कैप्चर की गई छवि के लिए कच्चे बाइट्स वापस दे सकता है। आपको एक उपयुक्त AVCaptureDevice और संबंधित AVCaptureDeviceInput और AVCaptureDeviceOutput (AVCaptureVideoDataOutput या AVCaptureStillImageOutput) के साथ एक AVCaptureSession सेट अप करने की आवश्यकता है। ऐप्पल के पास उनके प्रलेखन में इस प्रक्रिया के कुछ उदाहरण हैं, और इसे कॉन्फ़िगर करने के लिए कुछ बॉयलरप्लेट कोड की आवश्यकता है।

एक बार जब आपका कैप्चर सत्र कॉन्फ़िगर किया गया हो और आप कैमरे से डेटा कैप्चर कर रहे हों, तो आप -captureOutput:didOutputSampleBuffer:fromConnection: प्रतिनिधि विधि सेट अप करेंगे, जहां पैरामीटर में से एक CMSampleBufferRef होगा। इसमें एक CVImageBufferRef होगा जिसमें आप CMSampleBufferGetImageBuffer() के माध्यम से पहुंच सकते हैं। उस पिक्सेल बफर पर CVPixelBufferGetBaseAddress() का उपयोग करके आपके कैमरे के फ्रेम का प्रतिनिधित्व करने वाले कच्चे पिक्सेल डेटा के लिए बाइट सरणी का मूल पता वापस आ जाएगा। यह कुछ अलग प्रारूपों में हो सकता है, लेकिन बीजीआरए और प्लानर यूयूवी सबसे आम हैं।

मेरे पास एक उदाहरण एप्लिकेशन है जो इस here का उपयोग करता है, लेकिन मैं आपको सलाह देता हूं कि आप my open source framework पर भी देखें जो मानक एवी फाउंडेशन बॉयलरप्लेट को लपेटता है और जीपीयू पर छवि प्रसंस्करण निष्पादित करना आसान बनाता है। इन कच्चे कैमरा बाइट्स के साथ आप क्या करना चाहते हैं, इस पर निर्भर करते हुए, मेरे पास पहले से कुछ ऐसा हो सकता है जिसका आप उपयोग कर सकते हैं या सीपीयू प्रोसेसिंग के मुकाबले इसे बहुत तेज़ करने का साधन हो सकता है।

+3

अंत में यह करने के लिए चारों ओर हो गया ... कोड आप यहां पोस्ट वास्तव में हालांकि मदद की: http://stackoverflow.com/a/11615472/472768 धन्यवाद! – FeifanZ

+0

क्या आप समझा सकते हैं कि मुझे इस मामले के इनपुट में उस मामले में क्या प्रदान करना चाहिए? 'AlprResults पहचानते हैं (हस्ताक्षरित चार * पिक्सेलडाटा, int बाइट्सपीरपीक्सेल, int imgWidth, int imgHeight, std :: वेक्टर regionsOfterest);' मैं केवल 'पिक्सेलडेटा' और 'क्षेत्रोंऑफ इन रुचि' के बारे में बिंदु समझता हूं। –

+0

@SashaKid - मुझे नहीं पता कि यह फ़ंक्शन क्या करता है, और यह एक पूरी तरह से अलग प्रश्न की तरह लगता है। –

-4
lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate); 
float luminance = dot(textureColor.rgb, W); 

mediump vec2 p = textureCoordinate; 
if (p.x == 0.2 && p.x<0.6 && p.y > 0.4 && p.y<0.6) { 
    gl_FragColor = vec4(textureColor.r * 1.0, textureColor.g * 1.0, textureColor.b * 1.0, textureColor.a); 
} else { 
    gl_FragColor = vec4(textureColor.r * 0.0, textureColor.g * 0.0, textureColor.b * 0.0, textureColor.a *0.0); 
} 
संबंधित मुद्दे