C# OpenCV 강좌 : 제 19강 - 캡쳐 및 녹화
캡쳐(Capture) 및 녹화(Record)

영상이나 이미지를 캡쳐하거나 녹화하기 위해 사용합니다.
영상이나 이미지를 연속적 또는 순간적으로 캡쳐하거나 녹화할 수 있습니다.
원본(Source, src)은 영상이나 이미지를 사용합니다.
프로젝트 구성
도구상자에서 Timer, Button을 Form1에 생성합니다.
timer2, button1, button2,button3를 생성하며 timer2의 Enable은 False로 Interval은 33으로 설정합니다.
3강 또는 4강의 프로젝트를 그대로 이어서 사용하시면 됩니다.
캡쳐(Capture)
단일 캡쳐
private void button1_Click(object sender, EventArgs e)
{
Cv.SaveImage("../../capture.jpg" , src);
}Cv.SaveImage()을 사용하여 영상이나 이미지를 캡쳐하여 저장합니다. Cv.SaveImage("경로및이름", 저장영상)입니다.
Button1을 클릭하면 그 시점의 영상이 캡쳐되어 지정된 경로로 저장됩니다.
- Tip : 연속적으로 캡쳐된 이미지는
capture.jpg에 덮어씌워집니다.
다중 캡쳐
private void button1_Click(object sender, EventArgs e)
{
string save_name = DateTime.Now.ToString("yyyy-MM-dd-hh시mm분ss초");
Cv.SaveImage("../../" + save_name + ".jpg" , src);
}Button1을 클릭하면 그 시점의 영상이 캡쳐되어 지정된 경로에 현재시간의 제목으로 저장됩니다.
DateTime.Now을 이용하여 실행된 순간의 시간을 받아옵니다.
이를 제목으로 사용하여 연속된 캡쳐도 저장되게 합니다.
초 단위로 캡쳐시 단일 캡쳐처럼 덮어씌워지는데, 초 단위 캡쳐를 이용하려면 배열 또는 타이머등을 이용합니다.
- Tip : 연속적으로 캡쳐된 이미지는
현재시간을 제목으로 저장됩니다. - Tip : 파일의 이름에는
\,/,:,*,?,",<,>,|은 입력될 수 없습니다.
녹화(Record)
단일 녹화
CvVideoWriter OpenCV_video = new CvVideoWriter("../../Record.avi", "XVID", 15, Cv.Size(640, 480));
private void timer2_Tick(object sender, EventArgs e)
{
OpenCV_video.WriteFrame(src);
}
private void button2_Click(object sender, EventArgs e)
{
timer2.Enabled = true;
}
private void button3_Click(object sender, EventArgs e)
{
timer2.Enabled = false;
}timer2를 켰다가 끄는 방식으로 원하는 지점에서의 영상을 시작합니다.
button2는 timer2를 Enable = true하여 녹화를 시작하며, button3은 timer2를 Enable = false하여 녹화를 중지합니다.
전역변수 OpenCV_Video를 생성하여 단일 녹화를 할 수있게 생성합니다.
CvVideoWriter를 사용합니다. CvVideoWriter("경로및이름", "FourCC", fps, 영상크기)를 입력합니다.
-
Tip :
FourCC(Four Character Code): 디지털 미디어 포맷 코드입니다. 즉, 코덱의 인코딩 방식을 의미합니다.CVID,Default,DIB,DIVX,H261,H263,H264,IV32,IV41,IV50,IYUB,MJPG,MP42,MP43,MPG4,MSVC,PIM1,Prompt,XVID가 있습니다.
-
Tip :
fps(Frame Per Second): 영상이 바뀌는 속도를 의미합니다. 즉, 화면의 부드러움을 의미합니다.
button2를 누르는 순간부터 button3을 누를 때까지 영상이 녹화됩니다.
다시 button2를 누르고 button3을 누르면 새롭게 저장되는 것이 아니라 영상이 덧 붙여져서 하나의 영상으로 생성됩니다.
다중 녹화
CvVideoWriter OpenCV_video
private void timer2_Tick(object sender, EventArgs e)
{
OpenCV_video.WriteFrame(src);
}
private void button2_Click(object sender, EventArgs e)
{
string save_name = DateTime.Now.ToString("yyyy-MM-dd-hh시mm분ss초");
OpenCV_video = new CvVideoWriter("../../" + save_name + ".avi", "XVID", 15, Cv.GetSize(src));
timer2.Enabled = true;
}
private void button3_Click(object sender, EventArgs e)
{
timer2.Enabled = false;
}다중 캡쳐 방식과 동일하며, 다른 점은 OpenCV_video를 프로그램 실행시 생성시키는 것이 아니라 button2의 녹화 시작을 눌렀을 때 생성합니다.
이와 같은 방법은 button2를 누를 때마다 새롭게 그 때의 시간으로 영상제목을 생성하여 저장합니다.
공유하기
Kakao
Naver
Twitter
LinkedIn
Facebook
댓글 남기기