'OpenCV'를 사용하는 이유 중에 하나가 웹캠을 이용하기 위해서입니다.
다른 방법도 있습니다만 크로스플랫폼(Cross Platform)을 생각한다면 'OpenCV'를 빼고 가기 힘들죠 ㅎㅎ
'OpenCV'를 닷넷으로 랩핑한 'OpenCVSharp'을 이용하여 웹캠에서 이미지를 받아오겠습니다.
윈폼 프로젝트를 생성합니다.
이전 글을 참고하여 프로젝트에 DLL을 복사합니다.
(참고 : [C#.Net, OpenCVSharp] 'opencvsharp'를 이용하여 C#에서 OpenCV 사용하기 - '2.설치하기' 참고)
폼에 픽처 박스 한 개와 타이머 하나를 추가합니다.
pictureBox1
timer1
코드는 이전 글과 비슷합니다.
단지 이미지를 불러오는 것이 아니라 캠 장치에서 읽어 오는 것으로 바뀐 것뿐이죠.
타이머가 추가된 이유는 일정 간격을 두고 캠의 화면을 불러오려고 그렇습니다.
namespace OpenCV_CamTest
{
public partial class Form1 : Form
{
IplImage m_cvImg;
CvCapture m_cvCap;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//카메라 지정
//제어판 기준인듯?
m_cvCap = CvCapture.FromCamera(0);
m_cvCap.FrameWidth = 320;
m_cvCap.FrameHeight = 240;
//타이머 설정
timer1.Interval = 20;
timer1.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
//카메라에서 프레임 가져온다.
m_cvImg = m_cvCap.QueryFrame();
//IplImage을 비트맵으로 전환
pictureBox1.Image = m_cvImg.ToBitmap();
}
}
}
테스트를 하기 전에 웹캠이 잘 잡혀있는지 확인하셔야 합니다.
이렇게 웹캠이 잡혀있다면 프로젝트를 실행해 보겠습니다.
우와 잘 나오네요~
분명 'OpenCVSharp'을 리눅스에서 사용할 수 있는것 같은데 자료가 없습니다-_-;;
'OpenCvSharp.dll'만 추가하면 똑같이 동작한다는데 안 됩니다-_-;
혹시나 해서 'monodevelop'로 작성해 봤지만 에러 나는 건 마찬가지;;
그래서 몇 가지 작업을 해주니 되긴 되네요;;;;
(이것도 포스팅할 예정입니다.)
원하는 모양으로 되는 게 아니라서 걱정이긴한데.....
일단 확인 좀 더해보고 해보고 'emgu cv'로 갈아 타야 할 것 같습니다.
테스트 프로젝트 :