10

से वांछित डेटा प्राप्त करना मेरे पास एक ऐसा प्रोग्राम है जो वास्तविक समय में कैमरा इनपुट देखता है और मध्य पिक्सेल का रंग मान प्राप्त करता है। विधि एक AVCaptureSession उत्पादन और उसके बाद मैं निम्नलिखित कोड का उपयोग कर एक पिक्सेल के आरजीबी मूल्यों हड़पने (जो एक CVPixelBuffer रूप में पढ़ा जा करने के लिए होता है) से CMSampleBuffer हड़पने के लिए:: मैं एक captureOutput का उपयोगएक सीवी पिक्सेलबफर संदर्भ

// Get a CMSampleBuffer's Core Video image buffer for the media data 
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
// Lock the base address of the pixel buffer 
CVPixelBufferLockBaseAddress(imageBuffer, 0); 

// Get the number of bytes per row for the pixel buffer 
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); 
// Get the pixel buffer width and height 
size_t width = CVPixelBufferGetWidth(imageBuffer); 
size_t height = CVPixelBufferGetHeight(imageBuffer); 
unsigned char* pixel = (unsigned char *)CVPixelBufferGetBaseAddress(imageBuffer); 

NSLog(@"Middle pixel: %hhu", pixel[((width*height)*4)/2]); 
int red = pixel[(((width*height)*4)/2)+2]; 
int green = pixel[(((width*height)*4)/2)+1]; 
int blue = pixel[((width*height)*4)/2]; 
int alpha = 1; 

UIColor *color = [UIColor colorWithRed:(red/255.0f) green:(green/255.0f) blue:(blue/255.0f) alpha:(alpha)]; 

मुझे लगता है कि सूत्र हालांकि ((चौड़ाई * ऊंचाई) * 4)/2 मुझे मध्य पिक्सेल मिल जाएगा, लेकिन यह मुझे छवि का शीर्ष मध्य पिक्सेल देता है। मैं सोच रहा हूं कि स्क्रीन के बीच में पिक्सेल तक पहुंचने के लिए मुझे किस फॉर्मूला का उपयोग करना होगा। मैं फंस गया हूं क्योंकि मुझे वास्तव में इन पिक्सेल बफर की आंतरिक संरचना नहीं पता है।

भविष्य में मैं 4 मध्यम पिक्सल को पकड़ना चाहता हूं और उन्हें अधिक सटीक रंग पढ़ने के लिए औसत देना चाहता हूं, लेकिन अभी के लिए मैं यह जानना चाहूंगा कि ये चीज़ें कैसे काम करती हैं।

उत्तर

4

मध्यम पिक्सेल ढूंढने के लिए आपके सूत्र के साथ मुख्य समस्या यह है कि यह केवल स्कैन लाइनों की असमान संख्या के लिए काम करता है। यदि आपके पास एक संख्या भी है, तो यह मध्य के ठीक नीचे स्कैन लाइन पर पहला पिक्सेल चुनता है। वह मध्य बाएं पिक्सेल है। चूंकि आईफोन वीडियो फ्रेम 90 डिग्री से घूमते हैं, इसलिए यह पिक्सेल वास्तव में शीर्ष मध्य पिक्सेल है।

तो बीच पिक्सेल का पता लगाने के लिए एक बेहतर सूत्र है:

(height/2) * bytesPerRow + (width/2) * 4 
+0

हाँ, iOS उपकरणों पर दो कैमरों के लिए डिफ़ॉल्ट झुकाव, परिदृश्य है, इसलिए यदि आप किसी भी चित्र मोड काम कर रहे हैं आप ' एक घूर्णन फ्रेम से निपटने की आवश्यकता होगी। –

+0

@ कोडो कोई सलाह? http://stackoverflow.com/questions/37611593/how-to-create-cvpixelbufferref-with-yuv420i420- डेटा –

+0

उत्सुक, चौड़ाई भाग 4 से गुणा क्यों किया जा रहा है? – OutOnAWeekend

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