영상 다루기¶
Goal¶
동영상을 읽고, 보여주고, 저장할 수 있다.
관련 함수인
cv2.VideoCapure(),cv2.VideoWriter()에 대해서 알 수 있다.
Camera로 부터 영상 재생¶
Camera로부터 영상을 읽어, 화면에 보옂기 위해서 아래와 같은 순서로 진행을 합니다.
VideoCapture Object를 생성합니다. 변수로는 camera device index나 동영상 파일명을 넘겨줍니다. 일반적으로 0 이면 Camera와 연결이 됩니다.
Loop를 돌면서 frame을 읽어 들입니다.
읽은 frame에 대해서 변환작업을 수행한 후, 화면에 보여줍니다.
영상 재생이 끝나면, VideoCapure Object를 release하고 window를 닫습니다.
아래 예제는 동영상을 읽어 grayscale로 변환 후 재생하는 예제입니다.
Sample Code
1# -*-coding: utf-8 -*-
2import cv2
3
4# cap 이 정상적으로 open이 되었는지 확인하기 위해서 cap.isOpen() 으로 확인가능
5cap = cv2.VideoCapture(0)
6
7# cap.get(prodId)/cap.set(propId, value)을 통해서 속성 변경이 가능.
8# 3은 width, 4는 heigh
9
10print 'width: {0}, height: {1}'.format(cap.get(3),cap.get(4))
11cap.set(3,320)
12cap.set(4,240)
13
14while(True):
15 # ret : frame capture결과(boolean)
16 # frame : Capture한 frame
17 ret, frame = cap.read()
18
19 if (ret):
20 # image를 Grayscale로 Convert함.
21 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
22
23 cv2.imshow('frame', gray)
24 if cv2.waitKey(1) & 0xFF == ord('q'):
25 break
26
27cap.release()
28cv2.destroyAllWindows()
File로 부터 영상 재생¶
File로 부터 동영상 재생도 Camera에서 영상 재생과 동일합니다.
Sample Code
1import cv2
2
3cap = cv2.VideoCapture('vtest.avi')
4
5while(cap.isOpened()):
6 ret, frame = cap.read()
7 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
8 cv2.imshow('frame',gray)
9
10 if cv2.waitKey(1) & 0xFF == ord('q'):
11 break
12cap.release()
13cv2.destroyAllWindows()
Note
동영상 재생시에는 해당 동영상의 Codec이 설치되어 있어야 합니다.
영상 저장¶
영상을 저장하기 위해서는 cv2.VideoWriter Object를 생성해야 합니다.
- cv2.VideoWriter(outputFile, fourcc, frame, size)¶
영상을 저장하기 위한 Object
- Parameters
outputFile (str) – 저장될 파일명
fourcc – Codec정보. cv2.VideoWriter_fourcc()
frame (float) – 초당 저장될 frame
size (list) – 저장될 사이즈(ex; 640, 480)
fourcc정보는 cv2.VideoWriter_fourcc('M','J','P','G') 또는 cv2.VideoWriter_fourcc(*'MJPG)
와 같이 표현할 수 있습니다. 각 OS마다 지원하는 codec 다릅니다.(Windows는 DIVX)
Sample Code
1# -*-coding: utf-8 -*-
2
3import cv2
4
5cap = cv2.VideoCapture(0)
6
7fourcc = cv2.VideoWriter_fourcc(*'DIVX')
8out = cv2.ViewoWriter('output.avi', fourcc, 25.0, (640,480))
9
10while (cap.isOpend()):
11 ret, frame = cap.read()
12
13 if ret:
14 # 이미지 반전, 0:상하, 1 : 좌우
15 frame = cv2.flip(frame, 0)
16
17 out.write(frame)
18
19 cv2.imshow('frame', frame)
20
21 if cv2.waitKey(0) & 0xFF == ord('q'):
22 break
23 else:
24 break
25
26cap.release()
27out.release()
28cv2.destroyAllWindows()