iOS: Obtenir pixel-par-pixel des données de la caméra
Je suis conscient de AVFoundation et son support de capture (pas trop familier bien que). Cependant, je ne vois pas du tout facilement accessible de l'API pour obtenir pixel-par-pixel de données (RVB-par-pixel ou similaire). Je ne souviens d'avoir lu dans les docs que c'est possible, mais je ne vois vraiment pas comment. Donc:
- Cela peut-il être fait? Si oui, comment?
- Serais-je obtenir des données d'image brutes ou des données compressées au format JPEG?
OriginalL'auteur FeifanZ | 2012-06-02
Vous devez vous connecter pour publier un commentaire.
AV de la Fondation peut vous redonner le raw octets pour une image capturée par la vidéo ou de l'appareil photo. Vous devez configurer un AVCaptureSession avec un AVCaptureDevice et un correspondant AVCaptureDeviceInput et AVCaptureDeviceOutput (AVCaptureVideoDataOutput ou AVCaptureStillImageOutput). Apple a quelques exemples de ce processus dans leur documentation, et cela nécessite un peu de code réutilisable à configurer.
Une fois que vous avez votre session de capture configuré et vous êtes la capture de données à partir de l'appareil photo, vous allez mettre en place un
-captureOutput:didOutputSampleBuffer:fromConnection:
délégué de la méthode, où l'un des paramètres sera un CMSampleBufferRef. Qui aura un CVImageBufferRef au sein de ce que vous auriez accès viaCMSampleBufferGetImageBuffer()
. À l'aide deCVPixelBufferGetBaseAddress()
sur ce pixel buffer sera de retour l'adresse de base du tableau d'octets pour les premières données de pixels représentant votre image de la caméra. Cela peut être dans différents formats, mais les plus courantes sont BGRA et plane YUV.J'ai un exemple d'application qui utilise ce ici, mais je vous recommande également de prendre un coup d'oeil à mon framework open source qui enveloppe la norme AV de la Fondation de passe-partout et il est facile d'effectuer le traitement de l'image sur le GPU. Selon ce que vous voulez faire avec ces raw octets, j'ai peut-être déjà avoir quelque chose que vous pouvez utiliser là ou un moyen de le faire beaucoup plus rapidement que sur le PROCESSEUR.
Pourriez-vous expliquer ce que je dois fournir, dans ce cas, en entrée de cette fonction?
AlprResults recognize(unsigned char* pixelData, int bytesPerPixel, int imgWidth, int imgHeight, std::vector<AlprRegionOfInterest> regionsOfInterest);
Je comprends point seulement surpixelData
etregionsOfInterest
.Je n'ai aucune idée de ce que cette fonction n', et qui sonne comme une question entièrement distincte de savoir.
pouvez-vous donner un peu d'aide avec l'obtention de la couleur de GPUImage2? Au moment où j'ai fait de l'obtention de la sortie de SolidColorGenerator à RenderView avec la moyenne de la couleur. Mais je n'ai aucune idée de comment obtenir UIColor. Pouvez-vous m'aider?
Si vous avez juste besoin de la couleur moyenne, un AverageColorExtractor fournira un rappel qui renvoie le RGBA composants de la couleur moyenne. Si vous avez besoin de la couleur d'un pixel à l'écran, vous pouvez joindre un RawDataOutput pour extraire le brut octets de l'image et tirez ceux correspondant au pixel que vous voulez.
OriginalL'auteur Brad Larson
OriginalL'auteur ram