Python OpenCV - cv2.VideoCapture 사용하기

BANG·2020년 11월 25일
0

OpenCV

목록 보기
3/16

VideoCapture

  1. 카메라에서 영상을 가져올 때
  2. 동영상 파일을 읽어올 때
  3. youtube에서 영상을 가져올 때
  4. web에서 영상을 받아올 때

cv2.VideoCapture.get(옵션)
영상의 지정한 옵션 속성을 반환

import cv2
import os
 
path = '/home/test/test/data'
filePath = os.path.join(path, "vtest.avi")
print(filePath)

if os.path.isfile(filePath):	# 해당 파일이 있는지 확인
    # 영상 객체(파일) 가져오기
    cap = cv2.VideoCapture(filePath)
else:
    print("파일이 존재하지 않습니다.")  

# 프레임을 정수형으로 형 변환
frameWidth = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))	# 영상의 넓이(가로) 프레임
frameHeight = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))	# 영상의 높이(세로) 프레임
 
frame_size = (frameWidth, frameHeight)
print('frame_size={}'.format(frame_size))

frameRate = 33
 
while True:
    # 한 장의 이미지(frame)를 가져오기
    # 영상 : 이미지(프레임)의 연속
    # 정상적으로 읽어왔는지 -> retval
    # 읽어온 프레임 -> frame
    retval, frame = cap.read()
    if not(retval):	# 프레임정보를 정상적으로 읽지 못하면
        break  # while문을 빠져나가기
        
    cv2.imshow('frame', frame)	# 프레임 보여주기
    key = cv2.waitKey(frameRate)  # frameRate msec동안 한 프레임을 보여준다
    
    # 키 입력을 받으면 키값을 key로 저장 -> esc == 27(아스키코드)
    if key == 27:
        break	# while문을 빠져나가기
        
if cap.isOpened():	# 영상 파일(카메라)이 정상적으로 열렸는지(초기화되었는지) 여부
    cap.release()	# 영상 파일(카메라) 사용을 종료
    
cv2.destroyAllWindows()

import cv2
 
########### 카메라 대신 youtube영상으로 대체 ############
import pafy
url = 'https://www.youtube.com/watch?v=u_Q7Dkl7AIk'
video = pafy.new(url)
print('title = ', video.title)
print('video.rating = ', video.rating)
print('video.duration = ', video.duration)
 
best = video.getbest(preftype='mp4')     # 'webm','3gp'
print('best.resolution', best.resolution)
 
cap=cv2.VideoCapture(best.url)
#########################################################
 
#cap = cv2.VideoCapture(0) # 0번 카메라
 
# frame 사이즈
frame_size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
              int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('frame_size =', frame_size)
 
# 코덱 설정하기
#fourcc = cv2.VideoWriter_fourcc(*'DIVX')  # ('D', 'I', 'V', 'X')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
 
# 이미지 저장하기 위한 영상 파일 생성
out1 = cv2.VideoWriter('./data/record0.mp4',fourcc, 20.0, frame_size)
out2 = cv2.VideoWriter('./data/record1.mp4',fourcc, 20.0, frame_size,isColor=False)
 
while True:
    retval, frame = cap.read()	# 영상을 한 frame씩 읽어오기
    if not retval:
        break   
        
    out1.write(frame)	# 영상 파일에 저장   
    
    # 이미지 컬러 변환
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    out2.write(gray)	# 영상 파일에 저장        
    
    cv2.imshow('frame',frame)	# 이미지 보여주기
    cv2.imshow('gray',gray)      
    
    key = cv2.waitKey(25)
    if key == 27:
        break
        
cap.release()	# 객체 해제
out1.release()
out2.release()
cv2.destroyAllWindows()
profile
Record Everything!!

0개의 댓글