忘れないように
UnityアセットのOpenCVforUnity購入から1ヵ月ほど経ち、やっとの事でウェブカメラ映像をグレースケールに処理することに成功。
基本的な操作であるグレースケール出力まで、時間をかけすぎたという反省の意味も込めて、ブログに残します。
練習も兼ねてGitHubでのメモ用コード公開は今後も行っていきます。
最後の行にソースコードも貼り付けています。
GitHub公開はこちら
公開用のコードは単純な画像処理を記述になっています。これは後で見直した時に最低限の動作を思い出すためです。
実制作中のコードやゲームオブジェクトはもう少し機能が多いです。
バーチャル体を動かす為に購入と勉強を始めましたが、想像以上に苦戦しました。
自由にバーチャル体を動かせるまでもう少し時間がかかりそうです。
以下ソースコード
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using OpenCVForUnity.CoreModule; using OpenCVForUnity.ImgprocModule; using OpenCVForUnity.UnityUtils; public class HogeWebCamOpenCvUnity : MonoBehaviour { //画像処理後の映像出力先 public RawImage HogeOutputRaw; //各々のウェブカメラの設定用項目 [SerializeField] private int width = 1920; [SerializeField] private int height = 1080; [SerializeField] private int fps = 30; //ウェブカメラテクスチャ private WebCamTexture hogeWebCamTexture; void Start() { //ウェブカメラの初期設定と起動 hogeWebCamTexture = new WebCamTexture(width, height, fps); HogeOutputRaw.texture = hogeWebCamTexture; hogeWebCamTexture.Play(); } void Update() { //ウェブカメラのフレームが変更されたら処理 if (hogeWebCamTexture.didUpdateThisFrame) { //ウェブカメラの画像をMatに変換 Mat originMat = new Mat(hogeWebCamTexture.height, hogeWebCamTexture.width, CvType.CV_8UC4); Utils.webCamTextureToMat(hogeWebCamTexture, originMat); //画像処理先Mat Mat changeMat = new Mat(originMat.cols(), originMat.rows(), CvType.CV_8UC4); //グレースケール処理 Imgproc.cvtColor(originMat, changeMat, Imgproc.COLOR_RGB2GRAY); //二値化(数値は各々で変更) Imgproc.threshold(changeMat, changeMat, 100, 255, Imgproc.THRESH_BINARY); //輪郭抽出 Imgproc.Sobel(changeMat, changeMat, -1, 1, 0); //Matをテクスチャに変換 Texture2D endTexture = new Texture2D(changeMat.cols(), changeMat.rows(), TextureFormat.RGBA32, false); Utils.matToTexture2D(changeMat, endTexture); //映像出力先にテクスチャ貼付け HogeOutputRaw.texture = endTexture; } } }
コメント