Unityが無料になっていることに気づいてダウンロードしてみました。OpenCV#、OpenCVfor、OpenCVplusとOpenCV系のアセット結構多いし価格帯も違ってて意味わからんので誰かまとめてください...学生に全部買うお金はないです。↓選べる松竹梅みたくなってるけど何が違うのかは正直謎です。ジェネリック医薬品的なやつなのかな...?OpenCVplusに関してはあんまり知見がないのでとりあえず画像処理100本ノックの最初の方の問題でもやりながら使い勝手を確認してみます。Unityをダウンロードしてプロジェクトにインポートします。UnsafeC#使用の許可パッケージをUnityに入れると「Unsafeコードは使えないよ!!!」的なエラーが出てくると思います。C#でもポインタをいじいじできるようにUnsafeなコードを許可してあげましょう。最近はC#でもポインタを使おう界隈が強いですね。(多分ECS、Jobシステムとかを最適に活用するのにポインタの方がいいみたいなアレだと思います。Code"の部分にチェックを入れます。コレでエラーも消えるハズです。Unityで検索しても公式のリファレンス以外で良さげな知見が少なく、非常に困りました。Unity自体がOpenCVをC#で使えるようにしたOpenCVSharpを踏まえて作っているみたいなのでこちらのワードで検索すると知見が結構見つかります。画像処理100本ノック(1~10)早速やっていきましょう。詳しい情報を知りたいときは画像処理100本ノックを見ましょう。いい問題集を作って戴きありがとうございます。下に書いてあるプログラムはこちらに公開しておきます。下準備まずは入力と出力の方法を決めましょう。入力インスペクタからTexture2Dを取得してそれをOpenCVのMatに変換します。Unity.TextureToMat(this.texture);出力MatからTexture2Dに変換してUGUIのRawImageのtextureにブチ込みます。changedTex;Q1.チャネル入れ替えデフォルトでRGBの各要素を入れ替える関数があるのでそれを利用しましょう。}}Q2.グレースケール化Q01と同じ手法でRGBをグレースケールに変換する関数があるのですが、それに頼ってばっかりなのもナンセンスなのでちゃんと1ピクセルごとに処理してみます。各ピクセルのRGB値を取得してグレースケールの変換ルールにしたがって変換します。グレースケールなのでR=G=Bになります。処理する際にvector3やらvec3fやらを使うとUnityが爆発するので注意(多分メモリリークか何か)。vec3bを使ってbytes型で処理するとうまくいきます。}}注目して欲しいのはこの部分です。mat.At<Vec3b>(yi,xi)で該当ピクセルのBGR(この順番なことに注意!)をbytes型3次元ベクトルで取得しています。mat.set<Vec3b>(yi,xi,v)で該当ピクセルのBGRをbytes型3次元ベクトルvと設定することができます。代入時にbytesを処理することを忘れないようにしましょう。Q3.二値化RGBをグレースケールで取得した後に閾値より大きいか小さいかで黒にするか白にするか決めます。Q2ができれば特に問題はないはず。}}Q4.大津の二値化Q03では閾値が一定に定められていましたが、本問題では閾値が画像の明暗の度合いからいい感じに定められます。暗めの画像だからって真っ黒になったり白めだからって真っ白になったりしません。}}Q5.HSV変換RBGをHue,Saturation,Valueに変換してHueを変更してRGBに戻すことをします。感覚としてはデカルト座標→極座標→デカルト座標って感じのノリな気がします。色の解像度を変更します。RGB各要素について一定の区間内の数値をある数値を一つの数値にします。今回はRGBそれぞれ256の数値を取れていたのを、4種類の数値で表すように変更する処理を施しています。}}Q7.平均プーリングピクセルをある程度のチャンクに固めてチャンク内の色の平均値で塗りつぶします。ドット絵っぽくなります。}}Q8.Maxプーリング塗りつぶす色をチャンク内平均じゃなくてチャンク内の最高値を用いるプーリングです。}}Q9.ガウシアンフィルタ画像のノイズを除去する手法の一つで、周辺のピクセルの色の重み付き平均を用いて該当ピクセルを塗りつぶします。本問題のように周辺ピクセルの情報を利用する処理を用いる際は端っこのピクセルを例外的に処理することを忘れないようにしましょう。}}重たい...処理に10秒ぐらいかかります。愚直計算したのは誤りだったみたいです。どこがボトルネックなんだろう...因みにGaussianフィルタはOpenCVにデフォルトで実装されています。面倒な実装が一行で済む上に処理速度もこっちの方が早いです。左が自前実装、右がデフォルト関数です。若干ブラーの入り方に違いがあるのがわかります。Q10.メディアンフィルタ画像のノイズを除去する手法の一つで、周辺のピクセルの色の中央値を用いて該当ピクセルを塗りつぶします。}}コレも重たいですね...デフォルトで実装されている関数があるのでこれを利用させていただきましょう。左が自前実装、右がデフォルト関数です。最後にわかりやすいドキュメントがなくて大変でした。Unityで画像処理をやってみたい人は触ってみる価値がありそうです。upLoginユーザーは見つかりませんでした。