C# OpenCV 강좌 : 제 3강 - Camera 출력

C# OpenCV Using Camera

C# OpenCV 강좌 : 제 3강 - Camera 출력
[ C#-OpenCvSharp2 ] - 윤대희

프로젝트 구성


1 도구상자에서 PictureBoxIpl, Timer을 Form1에 생성합니다. 위의 이미지와 같이 배치합니다.


속성을 아래와 같이 설정합니다.

  1. PictureBoxIpl
    • size : 640, 480
  2. Timer
    • Enable : True
    • Interval : 33



Camera 출력


using OpenCvSharp;

namespaceOpenCV를 사용할 수 있도록 선언합니다.



CvCapture capture;
IplImage src;

카메라의 영상을 받아올 CvCapture와 영상을 출력해 줄 IplImage를 선언합니다.



private void Form1_Load(object sender, EventArgs e)
{
    try
    { 
        capture = CvCapture.FromCamera(CaptureDevice.DShow, 0);
        capture.SetCaptureProperty(CaptureProperty.FrameWidth, 640);
        capture.SetCaptureProperty(CaptureProperty.FrameHeight, 480);
    }
    catch
    {
        timer1.Enabled = false;
    }
}

try~catch를 이용하여 카메라가 인식되지 않았을 때 오류가 발생하지 않도록 합니다.

CvCapture.FromCamera(CaptureDevice.DShow, 0);에서 0은 카메라의 장치 번호입니다. 웹캠이 달려있는 노트북의 경우 0이 노트북 카메라 입니다.

capture.SetCaptureProperty는 영상의 너비높이를 설정합니다. 장치가 인식되지 않을 경우 catch로 넘어가며 timer1를 사용하지 않게됩니다.


  • Tip : 카메라를 2개 이상 이용한다면 0이 아닌 1로 입력하면 외부 카메라로 인식되어 출력됩니다.
  • Tip : 동영상 파일 사용시 CvCapture.FromFile("경로")를 사용하여 동영상을 재생시킬 수 있습니다.



private void timer1_Tick(object sender, EventArgs e)
{
    src = capture.QueryFrame();
    pictureBoxIpl1.ImageIpl = src;
}

src에 현재의 영상 프레임을 받아오게 되고 pictreuBoxIpl1에 해당 영상을 출력하게 됩니다.


  • Tip : timer1은 33ms 마다 실행되며 그 때마다 영상을 출력합니다. Interval 값을 수정하면 프레임의 수가 바뀌게 됩니다.



private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    Cv.ReleaseImage(src);
    if(src != null) src.Dispose();
}

메모리 관리를 위하여 폼이 닫힐 때 ReleaseImage()Dispose()를 이용하여 메모리 할당을 해제합니다.


  • Tip : ReleaseImage()이미지의 메모리 할당을 해제합니다.
  • Tip : Dispose()클래스등의 메모리 할당을 해제합니다.



코드


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 OpenCvSharp;

namespace test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        CvCapture capture;
        IplImage src;

        private void Form1_Load(object sender, EventArgs e)
        {
            try
            { 
                capture = CvCapture.FromCamera(CaptureDevice.DShow, 0);
                capture.SetCaptureProperty(CaptureProperty.FrameWidth, 640);
                capture.SetCaptureProperty(CaptureProperty.FrameHeight, 480);
            }
            catch
            {
                timer1.Enabled = false;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            src = capture.QueryFrame();
            pictureBoxIpl1.ImageIpl = src;
        }
        
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Cv.ReleaseImage(src);
            if(src != null) src.Dispose();
        }       
    }
}


Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 2강 - PictureBoxIpl 도구 추가 ⤧  Next post C# OpenCV 강좌 : 제 4강 - Image 불러오기
    C#-OpenCvSharp2 Category