OpenCV 14

OpenCV+Unity 실시간 마커 검출 (카메라 사용)

아래 마커검출 예제를 통해 정지이미지에서 마커가 검출되는것을 확인하였다. https://dean83.tistory.com/73 OpenCV+Unity 마커 검출 Aruco 에서 미리 정의한 마커들을 검출하는 기능 1. 간략 설명 - 검출할 마커의 미리 정의한 데이터 획득 - 원본 이미지를 grayscale로 변환 - 미리 정의한 데이터와 기본 DetectorParameter 클래스 값을 이 dean83.tistory.com 간단히 해보려 하는것은, 아래 카메라 띄우기와 접목시켜 실시간으로 마커를 검출하는 앱을 만들고자 한다. 결론부터 말하자면, 동작을 하는데 끊김이 너무심하다. 퍼포먼스 문제가 있다. 내 폰이 예전꺼라 그런건진 모르겠다. 어쩌면 네이티브 OpenCV가 아니기에 퍼포먼스 저하가 발생하는걸 ..

OpenCV 2022.04.15

OpenCV+Unity Mat에서 Texture로 변경시 유의점

OpenCV는 영상 및 이미지 처리를 할때 Mat 이라고 하는 행렬로 이루어져 있다. 따라서 Unity에서 사용하는 Texture는 바로 사용할 수 없고, 상호 변환을 거쳐야 한다. OpenCVSharp.Unity.MatToTexture 나 TextureToMat 함수를 이용해 상호변환한다. 이중, TextureToMat은 괜찮은데 MatToTexture는 유의점이 두가지가 있다. 1. 스레드에서 동작시 오류가 발생한다. - 메인 스레드 외에 동작시 오류가 발생한다. 물론 다른동작은 스레드로 돌리고 이 함수를 호출할때는 Main스레드로 가져올 수 있다. 바로 SynchronizationContext 를 이용하면 된다. 자세한 사용법은 : https://dean83.tistory.com/41?categor..

OpenCV 2022.04.15

OpenCV+Unity 마커 검출

Aruco 에서 미리 정의한 마커들을 검출하는 기능 1. 간략 설명 - 검출할 마커의 미리 정의한 데이터 획득 - 원본 이미지를 grayscale로 변환 - 미리 정의한 데이터와 기본 DetectorParameter 클래스 값을 이용하여 이미지에서 마커 검출 - 마커 검출은 내부적으로 AdaptiveThreshold 와 Canny를 통한 Edge를 찾는다. - 원본 이미지 에서 마커 표시하기 - AdaptiveThreshold와 Canny로 파악한 Edge 정보를 기준으로 원본 이미지에서 마커를 표시한다. 2. 상세 - 마커 인식에 필요한 DetectorParameters 클래스 변수 생성 DetectorParameters detectorParameters = DetectorParameters.Creat..

OpenCV 2022.04.15

OpenCV+Unity Gaussian, Median Blur와 Canny 내용 재정리

보통 잡음제거를 위해 Gaussian Blur와 Median Blur를 많이 사용한다. 그리고, 이미지에서 edge를 검출하기 위해 Canny 알고리즘을 사용하여 검출한다. 이에대한 인자값 설명등을 위해 따로 내용정리를 한다. 0. 필터, 컨블루전에 대한 간략 설명 - 필터, Kernel, Window, Mask 가 동음이의어 이다. - 행렬로 이루어져 있으며, (예 : 5 x 5 행렬) 각 픽셀을 이 행렬을 통과시켜 값을 변경하는 계산식을 컨블루전 이라고 한다. 이런 행위 자체를 필터링이라 한다. * 각 알고리즘의 kernel크기는 홀수이어야 한다 1. Gaussian Blur - 대상이 되는 마스크가, 가운데 픽셀값이 가장 높고 주변부로 갈수록 낮다. - 이 특성이 있기에, 픽셀 계산을 진행하면, 대..

OpenCV 2022.04.14

OpenCV+Unity 실시간으로 영상에 필터효과 적용하기

1. 설명 - 카메라를 통해 받은 이미지에 실시간으로 스케치 효과를 적용하기. - 사실 만들고 싶은 필터는 함수를 추가하여 효과를 표현할 수 있다 (Red 필터효과라든지....) 2. 간략설명 - gray 로 이미지 변환 - GaussianBlur 로 잡음 제거 - Canny 알고리즘을 이용하여 Edge 찾기 - Threshold 를 이용하여 binary 이미지 변환 3. 상세 설명 - WebCamera 연동 부분은 https://dean83.tistory.com/69를 참고한다. - Update 함수에서, WebCamTexture를 Mat로 변환 Mat img = Unity.TextureToMat(input); - GrayScale 이미지로 변환 Mat imgGray = new Mat (); Cv2.C..

OpenCV 2022.04.14

Opencv+Unity 이용하여 문서인식 앱 만들기

1. 개요 - https://dean83.tistory.com/68 에서 설명한 문서인식하는 방법과 - https://dean83.tistory.com/69?category=1088148 에서 설명한 카메라 띄우는 방법을 활용하였다. 2. 소감 - 사실 문서 인식 앱을 만드는건 어렵지 않다. 하지만, 성능을 내게끔 하는것이 어렵다 - 어떤 기능을 이용하여 얼만큼 이미지를 튜닝할 것이냐가 그 1번이다. - 이것저것 기능을 많이 써서 튜닝을 해봤는데 결국 그 조합이 중요하다. - 예 : 흑백으로 변환 -> 바이너리 변환 -> edge 인식은 그 결과가 대체로 안좋았다. - 실질적으론 딥러닝 데이터들을 연계하여야만 좋은 성능을 낼것으로 보인다. - 스터디 목적이므로 안드로이드 스토어 출시는 하지 않았고, 기타..

OpenCV 2022.04.12

[Unity] Unity+OpenCV 문서 인식 하기

PaperScanner 스크립트를 이용하여 문서 스캔. 예제 씬 : DocumentScannerScene 1. 간략 요약 - PaperScanner 맴버 변수 생성 - 스캔 옵션 설정 - texture를 mat으로 변환하여 PaperScanner 의 mat 변수에 배정 - PaperScanner 의 Success 여부를 판단하기위해 변수 호출시 내부함수 CalculateOutput가 실행되며 스캔 작업을 진행함 - 흑백변환, 노이즈 감소, 블러처리, edge 검출, 윤곽선 검출 등 - 검출된 영역중 문서 영역을 추출하여 결과 출력 - Success 일때 결과물을 다시 texture로 변환하여 화면에 표시 2. 세부 설명 - 옵션값 - PaperScanner 옵션값 - GrayMode : grayscale..

OpenCV 2022.04.01

[Unity] OpenCV+Unity 도형 감별하기

사각형, 원, 별표 등 이미지에서 도형 감별하기. 사실 명확하게 그려져 있는 샘플이미지에서 정확도가 높다. 사진 등에선 정확도가 매우 떨어지기에 이미지 전처리를 잘 하여야 한다. 씬 이름 : Identify_Contours_by_Shape 1. 기본 흐름 - 이미지를 grayscale로 변환한다 - threshold를 이용하여 흑백으로 변환한다. 이때 사용되는것이 임계값인데, 임계값 미만이면 0, 임계값 초과면 설정값으로 변경하여 흑백으로만 구분한다. - 흑백으로 구분된 이미지에서 외각선을 찾는다. - 찾은 외각선을 그리기 위해 필요한 최소의 포인트를 구해낸다 - 즉, 찾은 외각선을 다시 그리기 위해 최소 점을 구한다. 사각형을 그리는데에는 4개의 점만 있으면 되는데 결과값이 20개가 나왔다면, 4개로 ..

OpenCV 2022.03.30

[Unity] OpenCV+Unity 사진에서 인물 감별

사진을 통해 인물을 감별하는 예제코드. 딥러닝 파일이 특정 인물에 대한 파일이 있어 해당 인물이 누군지 감별함 Scene 명칭 : FaceDetectorScene 사용되는 딥러닝 결과 파일 haarcascade_frontalface_default.xml face-recognizer.xml 1. 스크립트 시작시, Awake에서 위 두개의 파일을 읽어 내용을 메모리에 할당함. FileStorage storageFaces = new FileStorage(faces.text, FileStorage.Mode.Read | FileStorage.Mode.Memory); cascadeFaces = new CascadeClassifier(); recognizer = FaceRecognizer.CreateFisherFac..

OpenCV 2022.03.29

[Unity] Opencv+Unity 얼굴 인식부위에 이미지 넣기

https://dean83.tistory.com/63 에 이어서. 얼굴 인식이 되는것은 확인하였다. 그러나 실질적으로 무언가를 하기 위해선 인식된 얼굴 좌표값을 알아야 하고, 알아낸 좌표값으로 무언가 작업 을 해야 의미가 생긴다. 1. 인식된 각 얼굴의 좌표값을 알아내는 법 - FaceRecognizerScene 의 Start 함수를 보면, 얼굴인식된 결과물을 가져오는 코드가 있다. OpenCvSharp.Rect[] rawFaces = cascadeFaces.DetectMultiScale(gray, 1.1, 6); - 결과로 나온 rawFaces안에 각 인식된 얼굴이 담겨있고, 해당 rect의 좌표값과 너비 등을 이용하면 된다. 2. 인식범위에 이미지 겹치기 - 인식된 범위에 이미지를 겹치기 위해 씬 작..

OpenCV 2022.03.29