Question

Je me suis approché d'abord cette question avec CoreImage à l'esprit (parce que je dois aussi faire la reconnaissance faciale), mais réalisé que, malheureusement, les filtres CI distorsion ne sont pas encore inclus dans l'iPhone.

J'ai essayé de plonger dans GLImageProcessing, CImg et ImageMagick, bien que j'ai eu beaucoup de mal à trouver un point de départ pour l'apprentissage de ceux-ci.

Étant donné le nombre d'applications qui ne tiennent distorsion de l'image, je sais que ce ne peut être incroyablement difficile.

Je ne sais pas C ou C ++, et ne pas le temps d'apprendre les langues, sauf nécessité absolue. Il deviendrait nécessaire si l'une de ces bibliothèques est la bibliothèque définitive pour traiter cette tâche.

Quelqu'un at-il une expérience avec l'une de ces bibliothèques?

Tous les livres qui couvrent cela pour iOS5 spécifiquement?

Ressources J'ai trouvé:

Était-ce utile?

La solution

Comme vous le dites, les capacités actuelles de Core Image sont un peu limité sur iOS. En particulier, l'absence de noyaux personnalisés comme vous trouverez sur le bureau est décevant. Les autres alternatives que vous la liste (à l'exception de GLImageProcessing, qui ne serait pas en mesure de faire ce genre de filtrage) sont toutes les bibliothèques CPU adsorbées seraient beaucoup trop lent pour faire le filtrage en direct sur un appareil mobile.

Cependant, je peux vous indiquer un framework open source appelé GPUImage que je viens Déployé parce que Je ne pouvais pas trouver quelque chose qui vous permettent de retirer des effets personnalisés. Comme son nom l'indique, le traitement GPUImage fait de l'accélération GPU d'images fixes et vidéo en utilisant OpenGL ES 2.0 shaders. Vous pouvez écrire vos propres effets personnalisés en utilisant ceux-ci, de sorte que vous devriez être capable de faire à peu près tout ce que vous pouvez penser. Le cadre lui-même est Objective-C, et dispose d'une interface assez simple.

A titre d'exemple d'un filtre de distorsion, le shader suivant (en fonction du code réponse de Danny Pflughoeft ) fait un sorte d'effet fisheye:

varying highp vec2 textureCoordinate;
uniform sampler2D inputImageTexture;

const mediump float bulgeFactor = 0.5;

void main()
{
    mediump vec2 processedTextureCoordinate = textureCoordinate - vec2(0.5);
    mediump float radius = processedTextureCoordinate.x * processedTextureCoordinate.x + processedTextureCoordinate.y * processedTextureCoordinate.y;
    mediump vec2 distortedCoordinate = vec2(pow(radius, bulgeFactor)) * processedTextureCoordinate + vec2(0.5);

    gl_FragColor = texture2D(inputImageTexture, distortedCoordinate);
}

Ce produit ce genre d'effet sur un flux vidéo:

filtre à effet fish-eye

Dans mes points de référence, GPUImage traite les images 4 fois plus rapide que Core Image sur un iPhone 4 (6X plus rapide que le traitement lié au processeur) et vidéo 25X plus rapide que Core Image (plus rapide 70X que sur le CPU). Même dans le pire des cas, je pourrais jeter à elle, elle correspond à Core Image pour la vitesse de traitement.

Le cadre est encore assez nouveau, de sorte que le nombre de stock filtres je en il y a en ce moment faible, mais je vais être l'ajout d'un groupe plus rapidement. En attendant, vous pouvez écrire vos propres shaders de distorsion sur mesure pour traiter vos images, et le code source pour tout est disponible pour vous d'ajuster au besoin. Mon message d'introduction à ce sujet a un peu plus de détails sur la façon dont à utiliser dans vos applications.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top