Multimedia Programming 25: Playing with Video Departments of Digital Contents Sang Il Park
Outline Playing with Video
OpenCV Video I/O OpenCV의 Video Reading Functions CvCapture cvCaptureFromFile cvCaptureFromCAM cvReleaseCapture cvQueryFrame cvGetCaptureProperty cvSetCaptureProperty
OpenCV Video I/O OpenCV의 Video Writing Functions cvCreateVideoWriter cvReleaseVideoWriter cvWriteFrame
CvCapture 비디오를 저장하는 데 사용하는 구조체 Image 경우의 IplImage와 비슷
cvCaptureFromFile 동영상 파일을 열어서 CvCapture 구조체에 저장 동영상 열기에 실패시 NULL을 반환 이미지 경우의 cvLoadImage와 비슷 Example) CvCapture * cvCaptureFromFile(const chat * filename) CvCapture * video = cvCaptureFromFile(“c:\\video.avi”); if(video == NULL) { printf(“fail in loading video!”); return -1; }
cvCaptureFromCAM 캡코더(웹캠)으로부터의 동영상 스트리밍을 CvCapture 구조체에 저장 index는 캠코더가 여러 개 있을 경우의 번호 일반적으로 -1 Example) CvCapture * cvCaptureFromCAM(int index) CvCapture * video = cvCaptureFromCAM(-1);
cvReleaseCapture CvCapture의 메모리를 해제 이미지 경우의 cvReleaseImage와 비슷 Example) void cvReleaseCapture (CvCapture ** capture) CvCapture * video = cvCaptureFromFile(“c:\\video.avi”); …. cvReleaseCapture(&video);
cvQueryFrame 현재 장면(frame)을 나타내는 이미지의 위치 반환하고 다음 장면으로 이동 Examples) CvCapture내에 내부적으로 저장된 위치값을 나타내며 지우거나 변화를 주면 안된다! 편집을 원할시는 이미지를 복사하여 편집한다 이미지는 위,아래가 뒤집혀 있다! (cvConvertImage사용) Examples) IplImage* cvQueryFrame(CvCapture * capture) IplImage * frame = cvQueryFrame(video); IplImage * image = cvCreateImage(cvGetSize(frame),8,3); // 위아래를 뒤집으며 frame을 image로 복사 cvConvertImage(frame, image, CV_CVTIMG_FLIP);
cvGetCaptureProperty 동영상(캡춰)의 여러 특징 값들을 읽어옴 ID는 아래의 값들 중 하나 double cvGetCaptureProperty(CvCapture *, int ID) CV_CAP_PROP_POS_MSEC 영상의 현재 시간적 위치 (밀리 세컨드 단위) CV_CAP_PROP_POS_FRAMES 현재 영상의 시간적 위치 (프래임 수) CV_CAP_PROP_POS_AVI_RATIO 현재 영상의 상대적 시간 위치 (0=시작, 1=끝) CV_CAP_PROP_FRAME_WIDTH 영상의 넓이 (width) CV_CAP_PROP_FRAME_HEIGHT 영상의 높이 (height) CV_CAP_PROP_FPS 영상의 프레임 레이트 (초당 프레임수) CV_CAP_PROP_FOURCC 코덱의 이름 (four character codec name) CV_CAP_PROP_FRAME_COUNT 전체 프레임 수 CV_CAP_PROP_BRIGHTNESS 카메라 밝기 (only for cameras) CV_CAP_PROP_CONTRAST 카메라의 대비 (only for cameras) CV_CAP_PROP_SATURATION 카메라의 saturation(only for cameras) CV_CAP_PROP_HUE 카메라의 Hue (only for cameras)
cvSetCaptureProperty 동영상(캡춰)의 여러 특징 값들을 설정(변경)함 ID는 다음 값들 중 하나 cvSetCaptureProperty(CvCapture *, int ID, double value) CV_CAP_PROP_POS_MSEC 영상의 시간적 위치 변경 (밀리세컨드 단위) (only for video files) CV_CAP_PROP_POS_FRAMES 영상의 시간적 위치 변경 (only for video files) CV_CAP_PROP_POS_AVI_RATIO 영상의 상대적 시간 위치 변경 (0=시작, 1=끝) (only for video files) CV_CAP_PROP_FRAME_WIDTH 영상의 넓이 변경 (only for cameras) CV_CAP_PROP_FRAME_HEIGHT 영상의 높이 변경(only for cameras) CV_CAP_PROP_FPS 영상의 프레임레이트 변경 (only for cameras) CV_CAP_PROP_FOURCC 영상의 코덱 변경 (only for cameras) CV_CAP_PROP_BRIGHTNESS 영상의 밝기 변경 (only for cameras) CV_CAP_PROP_CONTRAST 영상의 대비 변경 (only for cameras) CV_CAP_PROP_SATURATION 영상의 saturation변경(only for cameras) CV_CAP_PROP_HUE 영상의 Hue 변경(only for cameras)
실습 동영상 한 프래임 읽기 동영상 재생 2개의 동영상을 한꺼번에 재생 동영상 간의 부드러운 트랜지션 (cross dissolve)
CvVideoWriter 비디오를 저장할 때 사용하는 구조체 Image 경우의 IplImage와 비슷
cvCreateVideoWriter 비디오를 저장할 공간을 마련함 Image 경우의 cvCreateImage와 비슷 fourcc: four character codec name (뒷페이지 참조) size: 화면 크기 fps: 초당 프래임수 (보통 25 또는 30) is_color: 칼라로 저장인지 아닌지 정한다. (1= color, 0=gray) 코덱이 잘못된 경우 NULL을 반환 CvVideoWriter * cvCreateVideoWriter(char * filename, int fourcc, double fps, CvSize size, int is_color)
Four Character Codec Name codec 이름을 4자리 character로 표현 Examples) 0 : 무압축 CV_FOURCC('P','I','M','1') : MPEG-1 코덱 CV_FOURCC('M','J','P','G') : Moving JPEG 코덱 CV_FOURCC(‘I',‘4',‘2',‘0') : Intel Indeo 4 코덱 CV_FOURCC(‘H’,’2’,’6’,’1’) : Intel H-261 코덱 CV_FOURCC(‘H’,’2’,’6’,’3’) : Intel H-261 코덱 CV_FOURCC(‘D',‘I',‘V',‘X') : Divx 코덱 잘 선택되지 않으므로 보통 무압축 선택 후 외부 프로그램에서 압축
cvReleaseVideoWriter 비디오 쓰는 것을 끝낸다. Image 경우의 cvReleaseImage와 비슷 void cvReleaseVideoWriter (CvVideoWriter ** writer)
cvWriteFrame 현재 프레임에 그림 한 장을 추가한다. 추가 뒤에는 한 프레임이 자동으로 진행된다 int cvWriteFrame (CvVideoWriter * writer, IplImage *img)
실습 동영상 copy 두 개의 동영상 간의 부드러운 transition 저장
VirtualDub 대표적인 공짜 비디오 편집 프로그램 www.virtualdub.org 기본적인 비디오 압축, 변환 등을 손쉽게 수행 여러가지 작업을 필터들의 조합으로 수행 자신만의 필터를 만들 수 있도록 sdk가 공개되어 있음
VirtualDub을 이용한 압축 video > compression… 여러 코덱 중 선택
VirtualDub을 이용한 편집 그림의 축소, 확대, 블러링 등의 다양한 효과를 줄 수 있다.
실습 만든 동영상 코덱 변환