티스토리 뷰

OpenCV

[EmguCV] 이해를 할 수 없는 라이브러리, EmguCV

생각많은 소심남 2012. 7. 28. 00:41

아마 키넥트를 관심있어 하시는 분이라면 컴퓨터 비전을 접목시켜야 하겠다는 생각을 하실거고 당연히 OpenCV를 어떻게 적용시켜야 할까 하시는 분이 계실겁니다. 저 또한 그럴려고 노력하는 사람 중에 하나이고요.

그런데 문제는 여기서 발생합니다. OpenCV는 다들 알다시피 c++ 기반의 라이브러리입니다. 그래서 필요한 라이브러리 파일과 dll, include 파일을 일일이 설정해줘야 한다는 불편함이 있습니다. 그에 비해서 키넥트는 .net 기반의 자료들이 무척 많습니다. 물론 C++ 기반의 코딩도 가능하지만 실제로 검색해보면 자료가 거의 없는 걸 보실 수 있을 겁니다. 

 아무튼 키넥트에 비전을 접목시키려면 Kinect를 C++로 개발을 하던가 아니면 OpenCV를 C# .net으로 처리하던가의 방법을 택해야 합니다. 저는 두가지 다 시도해봤는데 며칠전에 포스팅한 DepthLimit이 바로 C++로 처리한 코드입니다.


2012/07/26 - [About OpenCV] - [Kinect with OpenCV] Background Subtraction & Depth Limitation


물론 C#으로 개발하는 것에 비해서 WinAPI를 불러와야 해서 조금 복잡한 면이 있습니다. 그래서 오늘 하루 종일 공부한 내용은 아 어떡하면 OpenCV를 C#으로 처리할 수 있을까 였습니다. 

 아시는 분도 계시겠지만 보통 다른 언어를 해당 언어로 바꾸는 역할을 하는 것을 Wrapper라고 합니다. 즉 C#을 처리하기 위해서는 c++을 C#으로 바꿔주는 Wrapper가 필요하다는 뜻이지요. 그런 역할을 하는 것들이 여러가지가 있는데 가장 많이 쓰이고 주기적으로 업데이트가 되는 것이 지금 소개해드릴 EmguCV입니다. 


 그런데 지금까지 체험해본 바로는 정말 쓸게 못된다입니다.

우선 제가 갖고 있는 교재는 EmguCV를 이용한 C# 디지털 영상처리라는 책입니다. 여기서는 C# 어플리케이션중 Winform을 사용해서 내용을 다루는데 저는 주로 하던게 WPF 쪽이어서 이걸로 코드를 변환하려고 했습니다. 그런데 막상 다하고 나면 이런 에러가 나더군요. 아래는 예제와 똑같이 만든 제 프로젝트입니다. 



Emgu.CV.cvInvoke에서 exception이 발생한다는 겁니다. 디버거 기능이 있어서 더 살펴봤습니다.



즉 Opencv_core240.dll 파일이 없다는 뜻이군요. 그래서 EmguCV깔릴때 같이 설치된 OpenCV관련 dll 파일을 다 옮겨줬습니다. 그런데도 문제가 여전히 발생합니다.

 웃기는 건 Example 폴더안의 WPF예제를 실행시켜보면 또 그거는 제대로 됩니다. 위의 예제를 그대로 실행시키면



이렇게 잘됩니다. 도대체 어디서 문제가 있는 걸까요? 

재미있는건 저와 같은 현상을 겪는 사람들이 생각보다 많은거 같더군요. 물론 공식사이트에도 이에 대한 해결 방안을 제시하고는 있는데 별로 신뢰성이 가지 않네요. 잘 되지도 않고요.

http://www.emgu.com/wiki/index.php/Download_And_Installation#The_type_initializer_for_.27Emgu.CV.CvInvoke.27_threw_an_exception.

분명 되시는 분들이 있으니까 계속 업데이트가 되고는 있겠지만 외부 영향에 이렇게 영향을 받는 라이브러리는 정상적으로 사용하기 힘들거 같네요. EmguCV... 참 이해할 수가 없는 라이브러리입니다. 그저 EmguCV에다가 키넥트를 연결하려다가 실패한 사람의 넋두리였습니다.

댓글