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") )