15장. 비디오 처리와 실시간 영상처리
정리
- 동영상은 프레임(사진)을 FPS 의 빠르기로 넘긴 것입니다. 10fps 면 한 장에 1000 ÷ 10 = 100ms, 80장이면 8초입니다.
cv2.VideoCapture로 열고isOpened()로 확인한 뒤,ok, frame = cap.read()를ok가 False 가 될 때까지 되풀이하고release()로 닫습니다. 속성은cap.get(cv2.CAP_PROP_...)로 읽고int(...)로 바꿉니다.cv2.VideoWriter(이름, fourcc, fps, (가로, 세로), isColor)로 저장합니다. 크기와 컬러가 맞지 않는 프레임은 조용히 빠지므로 저장 뒤 다시 열어 셉니다.- 동영상 처리는 앞 장들의 사진 처리(흑백, 블러, 이진화, 모폴로지, Canny)를 프레임마다 되풀이하는 것입니다.
- 움직임은 프레임 차이(
cv2.absdiff)로 빠르게, 배경 빼기(중앙값 배경, MOG2)로 통째로 찾습니다. 마당 동영상에서 프레임 차이는 공을 초승달 두 조각으로 잡았고, 중앙값 배경은 공과 수레를 통째로 잡아 35번에서 상자 2개를 그렸습니다. MOG2 는 첫 장에서 화면 전체를 전경으로 보았습니다. - 실시간은 한 장의 처리를 프레임 간격 안에 끝내는 것입니다. 교안 PC 에서 무거운 처리는 원래 크기에서 30fps 에 늦어 80장 중 22장을 건너뛰었고, 가로세로를 절반으로 줄이자 3.9배 빨라져 제때 끝났습니다.
- 웹캠은
cv2.VideoCapture(0)과cv2.waitKey(1)로 다루고 q 로 끝냅니다. 사람이 찍히는 영상은 알리고, 필요한 만큼만 찍고, 가리고 지웁니다.