OpenCV는 영상 및 이미지 처리를 할때 Mat 이라고 하는 행렬로 이루어져 있다.
따라서 Unity에서 사용하는 Texture는 바로 사용할 수 없고, 상호 변환을 거쳐야 한다.
OpenCVSharp.Unity.MatToTexture 나 TextureToMat 함수를 이용해 상호변환한다.
이중, TextureToMat은 괜찮은데 MatToTexture는 유의점이 두가지가 있다.
1. 스레드에서 동작시 오류가 발생한다.
- 메인 스레드 외에 동작시 오류가 발생한다. 물론 다른동작은 스레드로 돌리고
이 함수를 호출할때는 Main스레드로 가져올 수 있다. 바로 SynchronizationContext 를 이용하면
된다. 자세한 사용법은 : https://dean83.tistory.com/41?category=1088148
스레드 사용시 메인스레드 관련 오류발생 수정 (WPF의 dispatcher)
SynchronizationContext를 통해 메인스레드 부분에서 동작하는 UI 항목들 접근 해야한다. SynchronizationContext m_Context;를 맴버변수로 선언하고, 스크립트 시작시, (예 : Start 함수 등) ..
dean83.tistory.com
2. 메모리 누수를 방지하기 위해 전역변수에 담아줄 필요가 있다.
- 설명에 보면, 2번째 인자값을 넣지 않으면 계속하여 메모리 할당을 해서 리턴을 한다. 이럴경우 100%
outofmemory 오류가 발생하였다.
- 전역Texture2D 변수명 = OpenCVSharp.Unity.MatToTexture(Mat변수, 전역Texture2D 변수명);
이렇게 사용해야 한다. 예) globalTexture2D = OpenCVSharp.Unity.MatToTexture(sourceMat, globalTexture2D) ;
'OpenCV' 카테고리의 다른 글
OpenCV+Unity 실시간 마커 검출 (카메라 사용) (0) | 2022.04.15 |
---|---|
OpenCV+Unity 마커 검출 (0) | 2022.04.15 |
OpenCV+Unity Gaussian, Median Blur와 Canny 내용 재정리 (0) | 2022.04.14 |
OpenCV+Unity 실시간으로 영상에 필터효과 적용하기 (0) | 2022.04.14 |
Opencv+Unity 이용하여 문서인식 앱 만들기 (0) | 2022.04.12 |