C# OpenCV 강좌 : 제 53강 - 키 이벤트

C# OpenCV Key Event

C# OpenCV 강좌 : 제 53강 - 키 이벤트
[ C#-OpenCvSharp2 ] - 윤대희

키 이벤트(Key Event)


1 윈도우창에서 특정 키를 입력하였을 때 해당 경우에 맞는 동작을 발생시킬 수 있습니다.


원본(Source, src)를 영상이나 이미지를 사용하면 됩니다.

영상 사용하기 : 3강 바로가기

이미지 사용하기 : 4강 바로가기



Main Code


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenCvSharp;

namespace test
{
    class OpenCV : IDisposable
    {
        IplImage gray;
        IplImage key;
        
        public IplImage GrayScale(IplImage src)
        {
            gray = new IplImage(src.Size, BitDepth.U8, 1);
            Cv.CvtColor(src, gray, ColorConversion.BgrToGray);
            return gray;
        }
                    
        public IplImage KeyEvent(IplImage src)
        {
            key = src.Clone();
            CvWindow win = new CvWindow("Window", WindowMode.StretchImage, key);
                    
            bool repeat = true;
            while (repeat)
            {
                switch (CvWindow.WaitKey(0))
                {
                    case 'r':
                        key = this.GrayScale(src);
                        win.ShowImage(key);
                        break;
                    case '\r':
                        key = src;
                        win.ShowImage(key);
                        break;
                    case (char)27:
                        win.Close();
                        repeat = false;
                        break;
                }
            }
            return key;
        }
                  
        public void Dispose()
        {
            if (gray != null) Cv.ReleaseImage(gray);
            if (key != null) Cv.ReleaseImage(key);        
        }
    }
}



Class Code


key = src.Clone();
CvWindow win = new CvWindow("Window", WindowMode.StretchImage, key);

결과 이미지인 key에 원본 이미지 src를 복제합니다.

윈도우 창 win을 생성하고 초기 이미지를 key로 사용합니다.


bool repeat = true;
while (repeat)
{
    ...
}

while()문을 이용하여 repeatfalse가 될 때까지 반복합니다.


switch (CvWindow.WaitKey(0))
{
    ...
}

switch()문을 이용하여 키 입력값을 판단합니다.


case 'r':
    key = this.GrayScale(src);
    win.ShowImage(key);
    break;

r 키가 입력됬을 때 해당 구문을 실행합니다.

key 필드에 그레이스케일을 적용하고, win 윈도우 창에 표시합니다.


case '\r':
    key = src;
    win.ShowImage(key);
    break;

Enter 키가 입력되었을 때 key 필드를 src로 다시 초기화시키고, win 윈도우 창에 표시합니다.


case (char)27:
    win.Close();
    repeat = false;
    break;

Esc 키가 입력되었을 때 win 윈도우 창을 닫고 반복을 종료합니다.

아스키 값이나 유니코드를 사용할 경우 (char) 상수를 사용합니다.

  • Tip : case문은 항상 마지막에 break문을 포함해야합니다.



Result


2


3



Book Image

책이 출간되었습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍

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

  • C# OpenCvSharp4
  • Python OpenCV4
  • Using Tesseract
  • Using TensorFlow
  • Using Regular Expression
  • 윤대희 저 | 위키북스

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

    후원하기


    ⤧  Previous post C# OpenCV 강좌 : 제 52강 - 템플릿 매칭 ⤧  Next post C# OpenCV 강좌 : 제 54강 - 개체 제거
    C#-OpenCvSharp2 Category