윈도우 폼 애플리케이션에 opencv 라이브러리를 사용하기 위해 emgucv를 사용해 봅니다.
native opencv 코드를 감싸주는 Wrapper 개념이며, .NET 개발 환경에서 활용할 수 있는 크로스 플랫폼입니다.
[ ✅ emguCV 공식 문서 ]
.NET 그것도 C# 환경에서 애플리케이션을 작성하고 있기 때문에 어느 정도 새롭게 배울 필요가 있었습니다.
공식 문서를 보고 각 환경에서 어떻게 이미지 불러오고, 변수로써는 어떻게 처리하고 있는지 설명된 부분이 있어서 직접 구현해보고 내용을 정리해봅니다.
여기서 emguCV 라이브러리를 참조하는 방법은 따로 설명하지 않지만, 다음 글을 참고하는 것으로 충분한것 같습니다.
이전 글 중에 환경설정(C++)에 관련한 글이 있어 붙여 놓습니다. 필요한 경우 참고하세요.
[ openCV | C++ ] 비주얼 스튜디오 openCV 환경 설정 하기
[ openCV | C++ ] 비주얼 스튜디오 코드에서 openCV 환경 설정 하는 방법(맥 버전)
[ openCV | C++ ] Xcode 에서 openCV 환경 설정 하는 방법
[ 환경설정 ] Visual Studio Code 에서 C++ 컴파일 디버그 환경 설정 방법(맥 버전.)
주 목적 ⚙️
- 이미지 전처리 작업을 윈도우 애플리케이션을 통해 활용하기 위함
- 유저 인터페이스에서 전처리 특정 기능을 사용 가능하게 함
- 이미지 전처리 작업을 유저가 확인 가능하게 함
이미지 변수 🎛️
언어 | 이미지 변수 |
C++(native) | cv::Mat |
C#(emguCV) | Emgu.CV.Image |
이미지 읽기 🖼️
언어 | 메서드 |
C++(native) | cv::Mat = cv::imread("filepath~"); |
C#(emguCV) | Emgu.CV.Image = new Image<"color", "type">("filepath~"); |
이미지 Show 아이템(메서드) 📺
언어 | 메서드 |
C++(native) | cv::imshow("window name", cv::Mat); |
C#(emguCV) | 1) PictureBox.Image = Emgu.CV.Image.ToBitmap(); 2) ImageBox = Emgu.CV.Image; |
C#에서는 두 가지 방법으로 이미지를 화면에 표시할 수 있습니다. 아래의 두가지 아이템 형태가 사용됩니다.
1) PictureBox : C# .Net Framework 표준 아이템
2) ImageBox : EmguCV UI 아이템
여기서 ImageBox를 사용하기 위해서는 다음의 프로젝트 참조 설정이 필요하다. ( 'Emgu.CV.UI.dll' )
ImageBox 아이템을 사용하게 되면, FunctionalModeOption 이 기본 "Everything"으로 설정되어 있기 때문에 이미지를 우클릭하면 모든 메서드를 즉각적으로 사용할 수 있게 됩니다.
또한 우클릭 메뉴 중 "Property"를 눌러서 해당 이미지가 어떤 메서드로 처리가 되었는지 히스토리를 볼 수 있고, 바로 전 단계 또는 모든 전처리를 초기화할 수 있는 기능도 있습니다.
빠르게 전처리를 해보고, 색상 채널의 경계 값 설정 등 사전 코딩 없이 감을 잡기 위한 툴로 좋은 것 같습니다.
하지만 애플리케이션을 일반 유저에 배포하는 경우에는 FunctionalModeOption를 비활성화하는 것이 개인적인 생각으로 좋을 거라 생각하네요. 물론, 개발자가 우클릭 기능이 있다는 것을 알리지 않는 한 유저는 쓰지 않겠지만요.
조금 더 사용해봐야 알겠지만, 이미지 전처리는 기본적으로 emguCV 아이템 Image를 통해 수행된다는 점을 알았고, 유저에게 표시하기 위한 수단으로는 두 가지 경우를 정리해봤습니다. 표시하는 단계에서는 비트맵 메서드를 사용하냐 그렇지 않냐의 차이만 있으며, 각 목적에 맞게 PictureBox 또는 ImageBox의 표시 수단을 맞춰주면 될 것 같습니다.
개인적인 잡생각 🤞
ImageBox를 사용하는 경우가, 아무래도 여러 가지 기능이 유저에게 노출되어 있고, 배포했을 경우 리스크를 생각해보면 메모리 비용과 안정성? 면에서 불리할까요? 그 점은 조금 더 찾아봐야겠네요.
'[ C# ]' 카테고리의 다른 글
[opencvSharp] setMouseCallback 함수 사용 방법 (0) | 2022.04.30 |
---|