C# OpenCV 강좌 : 제 19강 - 캡쳐 및 녹화

   

캡쳐 및 녹화 (Capture & Record)


1 영상이나 이미지를 캡쳐하거나 녹화하기 위해 사용합니다. 영상이나 이미지를 연속적 또는 순간적으로 캡쳐하거나 녹화할 수 있습니다.


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

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


프로젝트 구성


도구상자에서 Timer, Button을 Form1에 생성합니다.

timer2, button1, button2,button3를 생성하며 timer2EnableFalseInterval33으로 설정합니다.

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를 켰다가 끄는 방식으로 원하는 지점에서의 영상을 시작합니다. button2timer2Enable = true하여 녹화를 시작하며, button3timer2Enable = 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를 누를 때마다 새롭게 그 때의 시간으로 영상제목을 생성하여 저장합니다.



도움이 되셨다면 광고 클릭 부탁드립니다.

⤧  Next post C# OpenCV 강좌 : 제 20강 - 윤곽선 검출 ⤧  Previous post C# OpenCV 강좌 : 제 18강 - 기하학적 변환