2016. 5. 3. 17:02ㆍ코딩/openCV
Emgu CV란?
닷넷 프로그래밍 언어로 OpenCV를 사용할 수 있는 라이브러리!
이번에 프로젝트로 OCR을 하려고 하는데, C++을 이용해서 할려니까 일이 너무 많더군요..
그래서 Emgu CV를 이용하여 C#으로 컴퓨터 비전 프로그래밍을 할려고 합니다.
물론, Emgu CV가 아니더라도 OpenCVSharp을 이용하면 C#으로 OpenCV를 사용할 수도 있습니다만
(p.s OpenCVSharp 관련 네이버카페 http://cafe.naver.com/opencvsharp)
마침 산 책이 Emgu CV를 이용하는 책이라서..
책을 보면서 문제가 뜨는 부분들을 고쳐가면서 글을 쓰고자 합니다.
참고로 저는 Windows 10, Visual Studio 2013을 사용하고 있고
공부하고 있는 책의 제목은 'Emgu CV와 테서렉트 OCR로 하는 컴퓨터 비전 프로그래밍' 입니다.
http://www.acornpub.co.kr/book/emgu-cv
1) 우선 Emgu CV를 설치합니다.
저는 최신버전은 아니고 2.4.10버전을 사용하려고 합니다.
https://sourceforge.net/projects/emgucv/files/emgucv/2.4.10/
맨 밑의 파일이 exe 설치파일입니다. 받아서 설치하시면 됩니다.
2) 환경변수를 설정합니다.
바탕화면의 '내 컴퓨터'에서 마우스 오른쪽 클릭 - 속성 - 고급 시스템 설정
또는 제어판 - 시스템 - 고급 시스템 설정으로 들어가서
고급 탭의 '환경 변수' 버튼을 클릭합니다.
밑의 시스템 변수의 Path를 더블클릭 or 편집 버튼 클릭 시 뜨는 편집 창에서
Emgu CV가 설치된 폴더 안의 bin\x64 또는 x86(이건 PC에 맞게)을 추가하시면 됩니다.
기본 위치 : C:\Emgu\emgucv-windows-universal 2.4.10.1940\bin\x64
3) Emgu CV용 사용자 정의 컨트롤을 비주얼 스튜디오
툴박스에 추가합니다.
우선 비주얼 스튜디오의 도구 상자 - 일반 탭에서 마우스 오른쪽 클릭 후 항목 선택을 누릅니다.
(도구 상자가 안보면 위의 '보기' 탭에서 꺼내시면 됩니다.)
항목 선택에서 찾아보기를 누른 후
C:\Emgu\emgucv-windows-universal 2.4.10.1940\bin에 있는 Emgu.CV.UI.dll을 선택한 뒤 확인!
하면 이렇게 Emgu 컨트롤이 나옵니다.
4) 프로젝트에 dll 참조를 추가합니다.
우선 새로운 윈도우 폼 프로젝트를 생성한 뒤, 솔루션 탐색기의 참조에서 마우스 오른쪽 클릭 - 참조 추가!
그러면 참조 관리자가 나옵니다. 여기서 찾아보기를 클릭한 후
C:\Emgu\emgucv-windows-universal 2.4.10.1940\bin에 있는 Emgu로 시작하는 모든 dll파일과
(Debugger는 자기 비주얼 스튜디오 버전에 맞는 것만!) ZedGraph.dll을 추가해 줍니다.
이번에는 opencv_로 시작하는 모든 dll을 추가해야합니다. 프로젝트 탭 - 기존 항목 추가에서
C:\Emgu\emgucv-windows-universal 2.4.10.1940\bin\x64 안의 opencv_로 시작되는 모든 dll파일을 추가합니다. (dll 파일이 안보일 경우 탭에서 모든 파일로 고쳐주시면 보입니다.)
단, 여기서 opencv_ffmpeg.dll 파일이 없을수도 있습니다. 그래서 첨부파일에 추가합니다.
opencv_ffmpeg.zip
아니면 https://github.com/apc-llc/opencv-2.4.10/tree/master/3rdparty/ffmpeg 에서 받으셔도 됩니다.
64가 붙은 파일은 x64, 다른건 x86에 넣고 dll 추가를 하시면 됩니다.
그리고 솔루션 탐색기에서 폼을 클릭 한 후 속성 - 출력 디렉터리로 복사 를 '항상 복사'로!
5) 코딩
폼에 버튼을 하나 만들고 버튼을 더블클릭하여 버튼 클릭시의 코드를 작성합니다.
Emgu CV를 사용하기 위해 Emgu로 시작하는 네임스페이스를 추가해줍니다.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Structure;
namespace emguEX
{
public partial class Form1 : Form
{
//창 이름
String win = "Window";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
CvInvoke.cvNamedWindow(win);
//노란색인 400 200 영상 생성
using (Image<Bgr, Byte> img1 = new Image<Bgr, Byte>(400,200,new Bgr(0,255,255)))
{
MCvFont font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_COMPLEX,1.0, 1.0);
//노란 영상에 hello world. 시작점은 파랑(25,100)
img1.Draw("Hello, World", ref font, new Point(25,100), new Bgr(255,0,0));
//img1 보여주기, 키 입력, 창 종료
CvInvoke.cvShowImage(win, img1.Ptr);
CvInvoke.cvWaitKey(0);
CvInvoke.cvDestroyWindow(win);
}
}
}
}
그리고 실행한 후 버튼을 클릭하면 이런 창이 뜹니다!
만약 이런 창이 아니라 밑의 창이 뜰 경우!
이런 오류가 뜨는 경우에는
1. 환경변수를 다시 확인하라!
>> 저의 경우 위의 사진처럼 x86, x64, bin을 다 환경변수로 추가하고 비주얼 스튜디오를 껐다가 켰더니
잘 나왔습니다.
2. OpenCV dll파일이 제대로 추가되었는지 확인하라!
>> 모두 다 넣으셔야 됩니다!
3. 32비트, 64비트를 확인한다!
이렇게 다시 한번 확인해보시면 됩니다.
이렇게 Hello World를 Emgu CV를 통해 출력해보았습니다.
'코딩 > openCV' 카테고리의 다른 글
[Emgu CV] Emgu CV CVInvoke 오류 시... (0) | 2016.05.04 |
---|