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