はじめに
この記事ではOpenCVplusUnity(無料)を使用しています。
Unityで画像を保存する際にフリップ処理したいなんて時があると思います。RendereTextreでこねくり回したり、ピクセル取り出して処理することもできるかと思いますが面倒です。大人しくそんな時はOpenCVを使いましょう。楽です。
今回はこの結果を目指します。Texture2DをX軸,Y軸,XY軸に対してフリップ処理します。
といっても、することはPythonで使用する時と変わりません。
Texture2DをMatへ変換してFlip変換して再びTexture2Dへ返しているだけです。
実装方法
using UnityEngine;
using OpenCvSharp;
public class OpenCVManager
{
/// <summary>
/// Texture2Dをフリップ回転処理
/// </summary>
public static Texture2D FlipToTex2D(Texture2D tex, int flipNum)
{
Mat origin = OpenCvSharp.Unity.TextureToMat(tex);
if (flipNum == -1)
{
Cv2.Flip(origin, origin, FlipMode.XY);
}
else if (flipNum == 0)
{
Cv2.Flip(origin, origin, FlipMode.X);
}
else if (flipNum == 1)
{
Cv2.Flip(origin, origin, FlipMode.Y);
}
return OpenCvSharp.Unity.MatToTexture(origin);
}
}
まとめ
余談ですが、iOSアーカイブの予定のある方は最初からOpenCVforUnityを購入をお勧めします。bitcodeエラーから抜けれず、ビルドできてipaはできているのにアーカイブできない理由が分からず調べ続ける羽目になり、最終的に全移行することになります。
もちろんOpenCVをネイティブプラグインで全て自分で繋込めれば問題ないですが労力が見合ってません。外部ライブラリを使用した際は、アーカイブまで確認しろと教えられた良い教訓でした。
エラー内容について
OpenCVPlusUnityではアーキテクチャarm64が含まれていないエラーでアーカイブができません。
iPhone5s以降はarm64なので必須です。
staticライブラリのビルド時の簡易な設定なので対応待ち?ということは考えにくいので無償版はここまでという認識です。
Appleのアーキテクチャ、bitcodeについてわかりやすくまとめてくださっている記事【@taki4227様】
https://qiita.com/taki4227/items/db9b503e56ab25a8a375