[opencv-python] 비디오 읽고 쓰기

2019. 7. 1. 01:39Python-이론/python-opencv

비디오 읽고 쓰기 

이전에는 사진을 읽고 저장했다면 이번에는 비디오를 읽고 써보겠습니다. 비디오를 읽어 오기 위해서는 컴퓨터에 웹켐이 필요합니다. 그리고 웹캠을 실행하기 위해서 권한을 주어야합니다. 필자의 경우 파이참에서 처음 실행시킬 때 허용하시겠습니까 라고 나왔고 mac 시스템 환경 설정에 보안 및 개인 정보 보호에서 설정을 바꿔 줄 수 있습니다. 

 

권한

 

권한은 카메라 목록에서 취소 혹은 적용시킬 수 있다. 

import numpy as np
import cv2

def showVideo():
    cap = cv2.VideoCapture(0)

    cap.set(3, 960)
    cap.set(4, 640)

    while True:
        ret, frame = cap.read()

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('video', gray)

        k = cv2.waitKey(1) & 0xff
        if k == 27:
            break
    cap.release()
    cv2.destroyAllWindows()


showVideo()

결과

코드 설명

import numpy as np
import cv2

def showVideo():
    cap = cv2.VideoCapture(0) # 실행시킬 웹캠을 설정 할 수 있다.
	# 혹은 비디오 저장된 위치를 넣어서 사용할 수 있다. cv2.VideoCapture("video.avi")

    cap.set(3, 960) # 가로길이 설정할 수 있다.
    cap.set(4, 640) # 세로 길이 설정할 수 있다. 

    while True:
        ret, frame = cap.read() # 재생되는 비디오를 한프레임씩 읽습니다. 
		# 제대로 읽었다면 ret이 true이고 아니라면 false입니다. 

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #영상의 컬러를 설정해준다. 
        cv2.imshow('video', gray) #비디오를 틀어준다. 

        k = cv2.waitKey(1) & 0xff # 1ms뒤에 뒤에 코드 실행해준다. 
        if k == 27: #
            break
    cap.release() # cap의 객체를 반드시 종료시켜주어야한다. 
    cv2.destroyAllWindows() # 모든 화면 종료해준다. 


showVideo()

 

비디오 쓰기

이전에는 비디오를 촬영만하는 것을 했다면 이번에는 비디오를 촬영해서 저장해보겠습니다. 

 

import numpy as np
import cv2

def writeVideo():
    cap = cv2.VideoCapture(0)

    cap.set(3, 960)
    cap.set(4, 480)

    fps = 20
    width = int(cap.get(3))
    height = int(cap.get(4))
    fcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')

    out = cv2.VideoWriter('../resource/video/DIVX.avi', fcc, fps, (width, height))

    while True:
        ret, frame = cap.read()
        cv2.imshow('divx', frame)

        k = cv2.waitKey(1) & 0xff
        if k == 27:
            break
    cap.release()
    out.release()
    cv2.destroyAllWindows()

writeVideo()

 

결과

코드 설명

import numpy as np
import cv2

def writeVideo():
    cap = cv2.VideoCapture(0) # 웹캠 설정

    cap.set(3, 960) # 영상 가로길이 설정
    cap.set(4, 480) # 영상 세로길이 설정 

    fps = 20
    width = int(cap.get(3)) # 가로 길이 가져오기 
    height = int(cap.get(4)) # 세로 길이 가져오기
    fcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X') #DIVX 코덱 적용
	# 코덱 종류 
	# DIVX, XVID, MJPG, X264, WMV1, WMV2
    

    out = cv2.VideoWriter('../resource/video/DIVX.avi', fcc, fps, (width, height))
	# 비디오 저장을 위한 객체를 생성한다. 
    # cv2.VideoWriter(저장 위치, 코덱, 프레임, (가로, 세로))
    
    while True:
        ret, frame = cap.read()
        cv2.imshow('divx', frame) # 촬영되는 영상보여준다. 
		out.write(frame) # 촬영되는 영상을 저장하는 객체에 써준다. 
        
        k = cv2.waitKey(1) & 0xff
        if k == 27:
            break
    cap.release() # cap 객체 해제
    out.release() # out 객체 해제
    cv2.destroyAllWindows()

writeVideo()

 

참고 블로그

https://m.blog.naver.com/samsjang/220500854338