티스토리 뷰

OpenCV

[EmguCV] EmguCV 재도전 - Hello World!

생각많은 소심남 2012. 12. 11. 18:42

예전에 이런 글을 쓴 적이 있습니다.

2012/07/28 - [About OpenCV] - [EmguCV] 이해를 할 수 없는 라이브러리, EmguCV


참 그때도 시키는대로 다했는데 왜 안 되는 마음에서 글을 썼습니다. 그런데 마침 조금 시간이 남아서 한번 다시해봤고 이제는 잘 되네요. 

참고로 저는 Windows 7 x64에서 테스트했습니다.

그때도 설명 드렸다시피 EmguCV는 OpenCV의 C# Wrapper로써 WPF/Winform 상에서도 영상처리를 할 수 있도록 도와주는 툴입니다. 설치는 다음 사이트에서 받으시면 됩니다.


<http://sourceforge.net/projects/emgucv/files/latest/download?source=directory>



그러면 main 드라이브상에 emgu라는 이름으로 설치가 됩니다.

제가 이글을 쓸 때의 emguCV 버전은 v2.4.2.1777이었고, 사실 이부분이 조금 중요합니다. 이 버전앞에 붙어있는 2.4.2라는 의미가 OpenCV의 버전을 의미하기 때문입니다. 그래서 사실 설치파일에 들어있는 dll파일들도 보면



이 들어있습니다. 

자 그럼 일단 프로젝트를 한번 만들어봅시다. 

사실 보면 아시겠지만 EmguCV를 포함하는 프로젝트는 거의 대부분 Winform으로 되어 있습니다. 그 이유는 Winform 형식에서는 bitmap 형식이 기본적으로 포함되어 있기 때문입니다. WPF 상에서는 bitmap을 구현하지 않고 따로 bitmapImage라고 해서 약간은 규격이 다른 것이 붙어있습니다.

그래서 WPF에서 emguCV를 사용하기 위해서는 예제파일안에 들어있는 BitmapSourceConverter.cs를 프로젝트안에 포함시켜야 합니다. (쓸 경우에는 말이지요.)

일단 WPF 프로젝트를 하나 만듭시다. 그리고 reference에서 다음 것들을 추가하면 됩니다.



참고로 위의 네모를 주목하고 저 버전에 맞게 추가시켜주셔야 합니다. 저 버전으로 된 것 세개 ( Emgu.CV.dll , Emgu.CV.UI.dll , Emgu.Util.dll )을 추가시켜 줍니다. 나중에 키넥트나 다른 라이브러리 쓰실 분은 그때 추가시키시면 됩니다.


그러고 나서 프로젝트에 파일을 추가시켜줘야 하는데 자신이 원하는 기능이 포함된 OpenCV dll(EmguCV 폴더안에 들어있는) 파일을 추가하면서 다음의 파일들을 '반드시' 추가시켜줘야 합니다.


저는 단순히 글자만 띄워볼것이기 때문에 딱 3개의 OpenCV dll 파일을 추가시켰습니다. 

자 이렇게 추가된 상태에서 각 dll 파일의 properties 창을 열어봅니다. 그러면 그안에 Copy to Output Directory 라는 항목이 Do not Copy 로 되어 있을 겁니다. 이걸 다음과 같이 바꿔줍니다.



이 기능은 실행파일을 실행시킬때 따로 dependencies를 복사해주지 않아도 자동으로 복사되게끔 하는 옵션입니다. 즉 이 옵션이 걸린 상태로 다른 컴퓨터로 프로젝트를 옮겨도 실행이 된다는 의미입니다. 


자 여기까지 했으면 공식 홈페이지 상의 가이드를 따라가면 다음과 같이 되어 있습니다.



즉 x64용 시스템은 Build 옵션에서 Target Platform을 x64로 바꿔야 실행된다고 되어 있습니다. 저도 이걸 맨처음 시도했을 당시에는 이 설정대로 했었고 그래도 CvInvoke 에러가 나왔습니다. 그런데 이제서야 알게된 이유는 emguCV의 소스들이 애초에 x86이라서 그런건 아닐까 하는 생각을 해봅니다. 즉 진짜 native x64용 프로그램에 emguCV를 적용하기 위해서는 OpenCV 자체를 Cmake를 통해서 recompile 해줘야 되는 것이지요. 그래서 사실 위의 링크대로 받으신 분들은 이걸 고칠 필요가 없습니다. 그냥 x86으로 되어 있는 설정 그대로 쓰면 된다는 것이지요. 그래도 안되시는 분은 아마도 VS 2008이나 2005용 재배포 툴을 설치하지 않으셔서 그럴듯합니다.

자 여기까지 하고 이제 코드를 짜보면 됩니다. 먼저 네임스페이스부터 추가합니다.


밑의 세개가 EmguCV를 사용할 때 필요한 겁니다.

이제 글자를 띄우려면 image를 하나 올려야 되는데 이게 bitmap형식이라서 WPF상에서 쓰는 bitmapsource로 변환시키려면 converter가 필요합니다. 이건 emguCV 폴더의 WPF 창에 들어 있습니다.



당연히 프로젝트에 포함시키면 네임스페이스도 같이 바꿔줘야 하겠지요?



그러고 나서 XAML 상에 다음과 같이 버튼 컨트롤과 이미지 컨트롤을 삽입합니다.



그리고 버튼에 대한 이벤트를 다음과 같이 작성해줍니다.



앞에서 말한 것처럼 해당 이미지에 폰트를 올린 결과가 Bitmap이기 때문에 이걸 BitmapSource롤 바꿔주는 과정이 필요한 겁니다.

그러면 결과가 다음과 같이 나옵니다.



간단한 글 출력이었습니다. 


댓글