C#/C# OpenCV/

C# OpenCV 2-3.영상 불러오기

2019. 10. 24.

VideoCapture

영상파일을 불러올때 사용하는 클래스.

 

Example Code

using System;
using System.Windows.Forms;
using OpenCvSharp;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            VideoCapture test = new VideoCapture("test.mp4");
            Mat frame = new Mat();

            /*while(test.PosFrames != test.FrameCount)
            {
                test.Read(frame);
                Cv2.ImShow("test", frame);
                Cv2.WaitKey(1);
            }*/
                        
            while(true)
            {
                test.Read(frame);
                if(!frame.Empty())
                {
                    Cv2.Resize(frame, frame, new Size(frame.Width * 1/2, frame.Height * 1/2));
                    Cv2.ImShow("test", frame);
                    Cv2.WaitKey(33);
                }
                else
                    break;
            }            

            frame.Release();
            Cv2.DestroyAllWindows();
            //Cv2.DestroyWindow("test");
        }
    }
}

 

Explain Code

			VideoCapture test = new VideoCapture("test.mp4");
            Mat frame = new Mat();

 VideoCapture 클래스로 영상파일 불러오기

절대경로 또는 상대경로를 이용.

캡쳐된 프레임을 표현해줄

Mat 클래스 초기화

 

			while(test.PosFrames != test.FrameCount)
            {
                test.Read(frame);
                Cv2.ImShow("test", frame);
                Cv2.WaitKey(1);
            }
            

while 현재 프레임이 영상전체의 프레임값이 아닐경우 반복

Read 메소드를 이용 frame 변수에 저장

Cv2.ImShow를 통해 시각적으로 표시

Cv2.WaitKey를 통해 프레임수 조절

    ex) 1초는 1000ms, 30f을 표현하고싶다면 1000 / 30 = 33. 60f 은 1000 / 60 = 16.

 
			while(true)
            {
                test.Read(frame);
                if(!frame.Empty())
                {
                    Cv2.Resize(frame, frame, new Size(frame.Width * 1/2, frame.Height * 1/2));
                    Cv2.ImShow("test", frame);
                    Cv2.WaitKey(33);
                }
                else
                    break;
            } 
            

while, break를 통한 반복

불러온 프레임이 Empty가 아니라면 반복, Empty라면 break.

Cv2.Resize를 통해 표시되는 영상 크기 조절가능.

    ex) 예시 코드에서는 영상소스의 1/2 크기로 조절, new Size(300,400)과 같은 직접입력도 가능.

 

			frame.Release();
            Cv2.DestroyAllWindows();
            //Cv2.DestroyWindow("test");
            

Release()로 메모리 해제.

Cv2.DestroyAllWindows() 로 창닫기. ( = Cv2.DestroyWindow("test") )