OpenCV plus Unity로 이미지와 웹캠 영상의 이진화까지

개요



windows form 어플리케이션으로부터 화상 ​​처리의 환경을 Unity에 이사 작업을 했을 때, 어디서나 고생했으므로 그 순서를 공유

이미지 처리라고해도 다양한 방법이 있습니다만, 나는 이번에 OpenCvSharp를 사용하고 있었으므로 그 방향으로
조사한 결과 선인의 지혜를 이용한 간단한 방법으로 Unity에서 Nuget의 확장 패키지를 사용하여 OpenCvSharp3 및 4를 가져오는 방법과 OpenCv plus Unity(for Unity는 비용면에서 이번에는 제외)라는 자산 스토어에서 다운로드하는 방법이 있습니다.

이번에는 후자의 방식을 소개합니다.

환경



windows10
Visual Studio 2019
Unity 2019.2.8f1(64-bit)

구현



3D 공간에서 프로젝트 만들기

OpenCV plus Unity 가져오기



1. Unity의 Asset Store에서 Search for assets에 opencv plus unity를 입력하여 패키지를 가져옵니다.

2. 라이브러리 사용 허가
가져 오면 이것이라도 언제든지 unsafe, unsafe라고 말하기 때문에 수정합니다.
Edit → Project Settings에서 Other Settings의 Arrow 'unsafe' Code 확인란을 선택합니다.


오류가 없어야 합니다.

웹캠 영상을 출력



1. Hierarchy 탭에서 "Create"→ "UI"→ "rawimage"를 선택하여 Scene에 추가

2. 스크립트 추가
다음 스크립트를 작성하고 rawimage에 연결

WebCamController.cs
namespace OpenCvSharp
{
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;

    public class WebCamController : MonoBehaviour
    {

        int width = 1920;
        int height = 1080;
        int fps = 30;
        Texture2D cap_tex;
        Texture2D out_tex;
        WebCamTexture webcamTexture;
        Color32[] colors = null;

        IEnumerator Init()
        {
            while (true)
            {
                if (webcamTexture.width > 16 && webcamTexture.height > 16)
                {
                    colors = new Color32[webcamTexture.width * webcamTexture.height];
                    cap_tex = new Texture2D(webcamTexture.width, webcamTexture.height, TextureFormat.RGBA32, false);
                    //GetComponent<Renderer>().material.mainTexture = texture;
                    break;
                }
                yield return null;
            }
        }
        void Start()
        {
            WebCamDevice[] devices = WebCamTexture.devices;
            webcamTexture = new WebCamTexture(devices[0].name, this.width, this.height, this.fps);
            webcamTexture.Play();

            StartCoroutine(Init());
        }
        void Update()
        {
            if (colors != null)
            {
                webcamTexture.GetPixels32(colors);

                int width = webcamTexture.width;
                int height = webcamTexture.height;
                Color32 rc = new Color32(0, 0, 0, byte.MaxValue);

                for (int x = 0; x < width; x++)
                {
                    for (int y = 0; y < height; y++)
                    {
                        Color32 c = colors[x + y * width];
                        byte gray = (byte)(0.1f * c.r + 0.7f * c.g + 0.2f * c.b);
                        rc.r = rc.g = rc.b = gray;
                        colors[x + y * width] = rc;
                    }
                }
                cap_tex.SetPixels32(this.colors);
                cap_tex.Apply();
            }
            GetComponent<RawImage>().texture = cap_tex;
        }
    }
}

3. rawimage의 Inspector에서 Width와 Height를 1920과 1080으로 실행
여기서 이미지가 뒤집힌 경우 x의 스케일을 -1로 조정하십시오.

이진화



여기에서 마침내 opencv

웹캠 영상을 2진화



1. 미리 만든 스크립트에 이진화하는 함수를 추가합니다.

WebCamController.cs
Texture2D To_Mono(Texture2D tex)
        {
            //matの定義
            Mat mat;

            //textureをmatに変換
            mat = Unity.TextureToMat(tex); 

            //画像をグレスケに変換
            Mat matGray = mat.CvtColor(ColorConversionCodes.BGR2GRAY);

            //画像を2値化
            Mat matMono = matGray.Threshold(100, 255, ThresholdTypes.Otsu);

            //2値化画像を白黒反転
            Cv2.BitwiseNot(matMono, matMono);

            //matMonoをtexture2Dに変換
            tex = Unity.MatToTexture(matMono);

            return tex;
        }

3.Update 내의 rawimage에 렌더링하는 곳의 코드를 이하로 변경

WebCamController.cs
out_tex = To_Mono(cap_tex);
GetComponent<RawImage>().texture = out_tex;

잘하면 흑백 세계로 돌아갑니다.

이미지를 이진화



1.public에서 texture2D 정의
public Texture2D imj_tex;//入力画像

2.이번 사용하는 이미지↓

이것을 Project 탭의 Assets에 D&D하여 추가
여기에서 사진을 스크립트에서 편집하기 위해 읽기/쓰기 활성화를 확인하십시오.

3. WebCamController의 imj_tex에 cola.jpg를 첨부하여 To_Mono의 인수를 cap_tex에서 imj_tex로 하면 흑백의 콜라를 할 수 있습니다

실행 결과





태초콜라

참고 URL



웹캠 영상 출력
ㅡㅡㅡㅡㅜㅜㅜㅜㅜ 하테나 bぉg. 코m/엔트리/2017/08/09/192813
이미지 처리 참조 코드
htps : // 기주 b. 코 m / 요요 요 - 요 / 100k의 ck

좋은 웹페이지 즐겨찾기