Вопрос по ios, camera, iphone – iOS: получить попиксельные данные с камеры

10

Я знаю об AVFoundation и его поддержке захвата (хотя и не слишком знакомо). Однако я не вижу легкодоступного API для получения попиксельных данных (RGB-на-пиксель или аналогичных). Я помню, как читал в документации, что это возможно, но я не понимаю, как это сделать. Так

Можно ли это сделать? Если да, то как? Должен ли я получать необработанные данные изображения или данные, сжатые в формате JPEG?

Ваш Ответ

2   ответа
-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);
 }
31

снятого видео или фотоаппаратом. Вам необходимо настроить AVCaptureSession с соответствующим AVCaptureDevice и соответствующими AVCaptureDeviceInput и AVCaptureDeviceOutput (AVCaptureVideoDataOutput или AVCaptureStillImageOutput). Apple имеет несколько примеров этого процесса в своей документации, и для настройки требуется некоторый шаблонный код.

После настройки сеанса захвата и захвата данных с камеры вы настроите-captureOutput:didOutputSampleBuffer:fromConnection: метод делегата, где одним из параметров будет CMSampleBufferRef. Это будет иметь CVImageBufferRef внутри него, к которому вы получаете доступ черезCMSampleBufferGetImageBuffer(), С помощьюCVPixelBufferGetBaseAddress() в этом пиксельном буфере будет возвращаться базовый адрес байтового массива для необработанных пиксельных данных, представляющих кадр вашей камеры. Это может быть в нескольких разных форматах, но наиболее распространенными являются BGRA и планарная YUV.

У меня есть пример приложения, которое использует этоВот, но я рекомендую вам также взглянуть намой фреймворк с открытым исходным кодом который оборачивает стандартный шаблонный фонд AV Foundation и облегчает выполнение обработки изображений на графическом процессоре. В зависимости от того, что вы хотите сделать с этими необработанными байтами камеры, у меня уже может быть кое-что, что вы можете использовать там, или средство сделать это намного быстрее, чем при обработке на процессоре.

@BradLarson Можете ли вы помочь с получением цвета из GPUImage2? На данный момент я закончил получать выходные данные из SolidColorGenerator в RenderView с усредненным цветом. Но я понятия не имею, как получить UIColor от него. Вы можете мне помочь?
Не могли бы вы объяснить, что я должен предоставить в этом случае при вводе этой функции?AlprResults recognize(unsigned char* pixelData, int bytesPerPixel, int imgWidth, int imgHeight, std::vector<AlprRegionOfInterest> regionsOfInterest); Я понимаю пункт только оpixelData а такжеregionsOfInterest.
@WINSergey - если вам просто нужен средний цвет, AverageColorExtractor предоставит обратный вызов, который возвращает компоненты RGBA среднего цвета. Если вам нужен цвет для определенного пикселя на экране, вы можете присоединить RawDataOutput, чтобы извлечь необработанные байты для изображения и вытянуть те, которые соответствуют нужному пикселю.
Наконец-то дошло до того, что код, который вы здесь разместили, действительно помог:stackoverflow.com/a/11615472/472768  Спасибо! FeifanZ
@SashaKid - я понятия не имею, что делает эта функция, и это звучит как отдельный вопрос.

Похожие вопросы