Domanda

I inizialmente avvicinato a questo problema con CoreImage in mente (perché ho anche bisogno di fare il riconoscimento facciale), ma sono reso conto che, purtroppo, i filtri CI distorsione non sono ancora inclusi su iPhone.

I tentato di tuffarsi in GLImageProcessing, CImg, e ImageMagick, anche se ho avuto un sacco di problemi a trovare un punto di partenza per l'apprendimento di uno di questi.

Dato il numero di applicazioni là fuori che la distorsione delle immagini, so che questo non può essere incredibilmente difficile.

non so C o C ++, e non hanno il tempo di imparare le lingue se non assolutamente necessario. Sarebbe diventato necessario se una di queste librerie è la biblioteca definitiva per la gestione di questo compito.

Qualcuno ha esperienza con una qualsiasi di queste librerie?

Tutti i libri là fuori che coprono questo per iOS5 in particolare?

Risorse ho trovato:

È stato utile?

Soluzione

Come dici tu, le attuali capacità di Core Image sono un po 'limitato su iOS. In particolare, la mancanza di personalizzato kernel come si trova sul desktop è deludente. Gli altri vi alternative lista (con l'eccezione di GLImageProcessing, che non sarebbe in grado di fare questo tipo di filtraggio) sono tutte le librerie della CPU-bound e sarebbe troppo lento per fare il filtraggio in diretta su un dispositivo mobile.

Tuttavia, posso puntare a un framework open source chiamato GPUImage che ho appena rotolato fuori perché non riuscivo a trovare qualcosa che ti permettono di tirare fuori effetti personalizzati. Come indica il nome, si occupa di elaborazione GPUImage accelerazione GPU di immagini fisse e video utilizzando OpenGL ES 2.0 shader. È possibile scrivere i propri effetti personalizzati utilizzando questi, così si dovrebbe essere in grado di fare tutto quello che si può pensare. Il framework stesso è Objective-C, e ha una abbastanza semplice interfaccia.

Come esempio di un filtro distorsione, la seguente Shader (basato sul codice in risposta di href="https://stackoverflow.com/a/5555920/19679"> Danny Pflughoeft) fa un una sorta di effetto 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);
}

Questo produce questo tipo di effetto su un flusso video:

Fisheye effetto filtro

Nei miei punti di riferimento, GPUImage elabora le immagini 4X più veloce di Core Image su un iPhone 4 (6 volte più veloce rispetto CPU-bound di elaborazione) e il video 25X più veloce di Core Image (70X più veloce rispetto alla CPU). Nel persino peggiore dei casi ho potuto gettare a lui, che corrisponda a Core Image per la lavorazione di velocità.

Il quadro è ancora abbastanza nuovo, quindi il numero di magazzino Filtri che ho in questo momento non v'è bassa, ma sarò l'aggiunta di un gruppo più presto. Nel frattempo, è possibile scrivere i propri shader distorsione personalizzata per elaborare le immagini e il codice sorgente per tutto è disponibile per di ottimizzare in base alle esigenze. Pubblica introduttivo su di esso ha un po 'più in dettaglio su come per utilizzare questo nelle applicazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top