-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathV01_project.py
67 lines (53 loc) · 1.71 KB
/
V01_project.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#-*-coding:utf-8-*-
from skimage.measure import compare_ssim
import numpy as np
import cv2
def showVideo():
cap = cv2.VideoCapture('/home/jkim/gitdir/project_cctv_storage_optimization/long_01.mp4')
# Input file
fps=20.0
width = int(cap.get(3))
height = int(cap.get(4))
fcc = cv2.VideoWriter_fourcc('D','I','V','X')
out = cv2.VideoWriter('out_01.avi', fcc, fps, (width,height))
#output file
CurrentFrame=0
StartFrame=0
EndFrame=1000
# 현재 프레임 계산에 이용할 CurrentFrame
# 시작 프레임 설정 StartFrame
# 종료 프레임 설정 EndFrame
cap.set(cv2.CAP_PROP_POS_FRAMES,StartFrame)
#설정한 시작프레임으로 영상 시작점을 조정합니다
CurrentFrame=StartFrame
#현재 프레임을 시작 프레임으로 설정합니다
print('녹화를 시작합니다')
score=0
#SSIM score 초기화
while True:
ret, frame = cap.read()
if not ret:
print("read error")
break
gframe=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#SSIM 비교를위해 흑백컬러로 바꿔줌 (SSIM 비교 흑백만 가능)
print(score)
if CurrentFrame!=StartFrame:
(score, diff) = compare_ssim(gframe, cprimg, full=True)
cprimg = gframe
if score < 0.99:
cv2.imshow('video', frame)
out.write(frame)
# SSIM이 0.9 보다 작을 때 에만 영상을 기록합니다
CurrentFrame+=1
#영상이 녹화되고 그다음 현재 프레임이 올라갑니다
k =cv2.waitKey(1) & 0xFF
if k == 27 or CurrentFrame==EndFrame :
print('녹화를 종료합니다')
print('start: ',StartFrame,'end: ', CurrentFrame)
break
#현재 프레임이 설정한 종료프레임과 같아지면 녹화를 종료합니다
cap.release()
out.release()
cv2.dsetroyAllWindows()
showVideo()