상위 목록: 하위 목록: 작성 날짜: 읽는 데 9 분 소요

키 이벤트(Key Event)

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

원본(Source, src)은 영상이나 이미지를 사용합니다.



메인 코드

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

namespace Project
{
    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);        
        }
    }
}


세부 코드

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문을 포함해야합니다.



출력 결과


댓글 남기기