iOS画像操作(歪み)
-
26-10-2019 - |
質問
私は最初、CoreImageを念頭に置いてこの問題にアプローチしました(私も顔認識を行う必要があるためです)が、残念ながら、CI歪みフィルターはまだiPhoneに含まれていないことに気付きました。
私はこれらのいずれかを学ぶための出発点を見つけるのに多くの問題がありましたが、GlimageProcessing、CIMG、およびImageMagickに飛び込もうとしました。
画像の歪みを行うアプリの数を考えると、これは非常に難しくないことはわかっています。
CやC ++はわかりません。絶対に必要でない限り、これらの言語を学ぶ時間がありません。これらのライブラリの1つが、このタスクを処理するための決定的なライブラリである場合、必要になります。
これらのライブラリのいずれかで経験がある人はいますか?
特にiOS5のためにこれをカバーする本はありますか?
私が見つけたリソース:
GlimageProcessingサンプルプロジェクトhttps://developer.apple.com/library/ios/#samplecode/glimageprocessing/introduction/intro.html
ImageMagick&Magickwandhttp://www.imagemagick.org/script/magick-wand.php
シンプルなiPhone画像処理http://code.google.com/p/simple-iphone-image-processing/
解決
あなたが言うように、コア画像の現在の機能はiOSで少し制限されています。特に、デスクトップにあるようなカスタムカーネルの欠如は残念です。リストする他の選択肢(この種のフィルタリングを行うことができないGlimageProcessingを除く)はすべてCPUに縛られたライブラリであり、モバイルデバイスでライブフィルタリングを行うには遅すぎます。
しかし、私はあなたに呼ばれるオープンソースフレームワークを指摘することができます gpuimage カスタムエフェクトを引き出すことができるものを見つけることができなかったので、私はただ展開しました。その名前が示すように、GPUIMAGEは、OpenGL ES 2.0シェーダーを使用して、静止画像とビデオのGPUアクセラレーション処理を行います。これらを使用して独自のカスタムエフェクトを書くことができるので、考えられることは何でもできるはずです。フレームワーク自体はObjective-Cであり、かなりシンプルなインターフェイスがあります。
歪みフィルターの例として、次のシェーダー(のコードに基づいて Danny Pflughoeftの答え)一種の魚眼効果を実行します。
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);
}
これにより、ビデオストリームにこの種の効果が生じます。
私のベンチマークでは、GPUIMAGEプロセスは、iPhone 4のコア画像よりも4倍高速な画像(CPUバウンド処理よりも6倍高速)とコア画像よりも25倍高速(CPUよりも70倍高速)。私がそれを投げることができる最悪の場合でも、それは処理速度のコア画像と一致します。
フレームワークはまだかなり新しいため、現在そこにあるストックフィルターの数は低いですが、すぐに束を追加します。それまでの間、独自のカスタムディストーションシェーダーを作成して画像を処理できます。すべてのソースコードが必要に応じて調整できるようになります。 それについての私の紹介投稿 これをアプリケーションで使用する方法についてもう少し詳しく説明しています。