どうもー、Reveです。
今日は久しぶりにブログの記事を色々とあげていこうかと思います。
ここの内容は、こちらの記事の続きになっています。
【OpenCVで画像処理ことはじめ】
では、いよいよOpenCVを使ってみましょう。
今回は画像をモノクロに変換する処理を施します。
といっても、OpenCVやることは2つだけです。
・グレースケールのMatを用意
・テクスチャ素材をグレースケールにしてコピー
早速、OpenCVアセットを使ってこの機能を実装したUnityプロジェクトを作りましょう。
(前回の記事でOpenCVをUnityに導入した前提です)
プロジェクトを作成したら、まずオブジェクトの中でQuad(Planeのような平面オブジェクト)を2つ用意して、
そのうちの一つには画像処理をしたいテクスチャ画像を貼ったマテリアルを付けてみます。画像はあらかじめリソースフォルダ(Project内に”Resources”という名前でフォルダを作成)して、そこに入れておきます。
なお、画像サイズはオブジェクトのスケール比に影響されるので、オブジェクトの縦横サイズを変えて調整しましょう。
そして、テクスチャ画像を割り当てていない平面に、新しいC#スクリプトを取り付けます。
ここではGrayScaleScript.csと名付けています。
スクリプトの中身は以下の通りです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
; title="GrayScaleScript.cs"]using UnityEngine; using OpenCVForUnity; public class GrayScaleScript : MonoBehaviour { // リソースの読み込み先 public string texturePath = "test001"; // Use this for initialization void Start () { //テクスチャ画像を読み込む Texture2D texture_src = Resources.Load(texturePath) as Texture2D; //テクスチャをMat画像へコピー Mat origin = new Mat(texture_src.height, texture_src.width, CvType.CV_8UC4); Utils.texture2DToMat(texture_src, origin); //グレイスケールMat Mat gray = new Mat(origin.rows(), origin.cols(), CvType.CV_8UC1); //RGBA画像をグレイスケールに変換 Imgproc.cvtColor(origin, gray, Imgproc.COLOR_RGBA2GRAY); //グレイスケールのMatをテクスチャに変換 Texture2D texture_out = new Texture2D(gray.cols(), gray.rows(), TextureFormat.RGBA32, false); Utils.matToTexture2D(gray, texture_out); //テクスチャの割り当て GetComponent<Renderer>().material.mainTexture = texture_out; } } |
そして、実行してみると下の画像のように、処理前の画像と処理後(グレースケール化)の画像が並べられます。
このように、アセットを使えばUnityでOpenCVによる画像処理が簡単にできるので、
95ドルかかるのですが、その価値は十分にあるのではないかと。
ちなみに、UnityとOpenCVでこんなものを作ってみたので、ご覧いただけるとうれしい限りです。
コメント