내맘대로 공부기록.

[ C# ]

[ emguCV | C# ] C# UI. 이미지 불러오기. pictureBox, ImageBox 비교.

fwanggus 2022. 1. 23. 17:33

윈도우 폼 애플리케이션에 opencv 라이브러리를 사용하기 위해 emgucv를 사용해 봅니다.

native opencv 코드를 감싸주는 Wrapper 개념이며, .NET 개발 환경에서 활용할 수 있는 크로스 플랫폼입니다.

[ ✅ emguCV 공식 문서 ]

 

Emgu CV: OpenCV in .NET (C#, VB, C++ and more)

From Emgu CV: OpenCV in .NET (C#, VB, C++ and more) Jump to navigation Jump to search Emgu CV is a cross platform .Net wrapper to the OpenCV image processing library. Allowing OpenCV functions to be called from .NET compatible languages. The wrapper can be

emgu.com

 

.NET 그것도 C# 환경에서 애플리케이션을 작성하고 있기 때문에 어느 정도 새롭게 배울 필요가 있었습니다.

공식 문서를 보고 각 환경에서 어떻게 이미지 불러오고, 변수로써는 어떻게 처리하고 있는지 설명된 부분이 있어서 직접 구현해보고 내용을 정리해봅니다.

 

여기서 emguCV 라이브러리를 참조하는 방법은 따로 설명하지 않지만, 다음 글을 참고하는 것으로 충분한것 같습니다.

 

Setting up Emgu CV Project with Visual Studio

Hi all, today i’m going to post on how to setup Emgu CV with Microsoft Visual Studio. If you are a C# lover and you want to work with Computer Vision and Image Processing then Emgu CV is for …

notebookbft.wordpress.com

 

이전 글 중에 환경설정(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' )

 

Add ImageBox Control - Emgu CV: OpenCV in .NET (C#, VB, C++ and more)

 

emgu.com

 

ImageBox 아이템을 사용하게 되면, FunctionalModeOption 이 기본 "Everything"으로 설정되어 있기 때문에 이미지를 우클릭하면 모든 메서드를 즉각적으로 사용할 수 있게 됩니다.

 

"EmguImgBox" 이미지를 마우스 우클릭 후 풀다운 메뉴를 호출.

또한 우클릭 메뉴 중 "Property"를 눌러서 해당 이미지가 어떤 메서드로 처리가 되었는지 히스토리를 볼 수 있고, 바로 전 단계 또는 모든 전처리를 초기화할 수 있는 기능도 있습니다.

 

우클릭 메뉴 중 "Conversion" 작업 후, "Property" 클릭 화면.&amp;amp;nbsp;

빠르게 전처리를 해보고, 색상 채널의 경계 값 설정 등 사전 코딩 없이 감을 잡기 위한 툴로 좋은 것 같습니다.

하지만 애플리케이션을 일반 유저에 배포하는 경우에는 FunctionalModeOption를 비활성화하는 것이 개인적인 생각으로 좋을 거라 생각하네요. 물론, 개발자가 우클릭 기능이 있다는 것을 알리지 않는 한 유저는 쓰지 않겠지만요.

 

조금 더 사용해봐야 알겠지만, 이미지 전처리는 기본적으로 emguCV 아이템 Image를 통해 수행된다는 점을 알았고, 유저에게 표시하기 위한 수단으로는 두 가지 경우를 정리해봤습니다. 표시하는 단계에서는 비트맵 메서드를 사용하냐 그렇지 않냐의 차이만 있으며, 각 목적에 맞게 PictureBox 또는 ImageBox의 표시 수단을 맞춰주면 될 것 같습니다.

 

개인적인 잡생각 🤞

ImageBox를 사용하는 경우가, 아무래도 여러 가지 기능이 유저에게 노출되어 있고, 배포했을 경우 리스크를 생각해보면 메모리 비용과 안정성? 면에서 불리할까요? 그 점은 조금 더 찾아봐야겠네요.

반응형

'[ C# ]' 카테고리의 다른 글

[opencvSharp] setMouseCallback 함수 사용 방법  (0) 2022.04.30