Data Science/컴퓨터비전

[opencv/python] 동영상 읽어와서 처리 후 다시 동영상으로 만들기

상어군 2023. 6. 18. 19:22
반응형

동영상을 기반으로한 프로젝트들을 하다보면, 결과에 대해서 표현해 주어야하는 경우가 생긴다.

해당 포스팅에서는 이에 대한 내용을 간략히 정리해본다.

 

1. 동영상 프레임(이미지) 단위로 불러오기

cap = cv2.VideoCapture("동영상 주소")

if cap.isOpened():
	ret, img = cap.read()
    
    while ret:
        ret, img = cap.read()
        if not ret:
            break

        ## 이미지 처리 부분
        # ~~

2. 미사용 프레임에 대해서 생략하기

특정 프레임을 스킵하고 싶다면 아래의 명령어로 cap.read 보다 빠르게 스킵 가능하다

cap.grab()

3. 이미지 처리하기

예측모델의 동작이나 전/후처리 가 여기에 해당할 수 있다.

해당 포스팅에서는 모델부분은 다루지 않고, 간단한 이미지에 글자 추가하기로 대체한다.

text = "입력하고싶은 글자"
font = cv2.FONT_HERSHEY_SIMPLEX # 글자 폰트
fontSize = 1 # 글자 크기
color = (255,255,255) # 글자 색
thickness = 1 # 글자 굵기
cv2.putText(img, text, (x,y), font, fontSize, color , thickness, cv2.LINE_AA)

4. 처리한 이미지 저장하기

output_path = '출력파일 경로 및 이름'
fps = 30
img_h, img_w, img_c = img.shape

# 동영상 파일 생성
out = cv2.VideoWriter(output_path,cv2.VideoWriter_fourcc(*'DIVX'), fps, (img_w,img_h))

# 이미지 입력
out.write(img)

# 동영상 릴리즈
out.release()

5. 활용

cap = cv2.VideoCapture("동영상 주소")

output_path = '출력파일 경로 및 이름'
fps = 30




if cap.isOpened():
	ret, img = cap.read()
    
    img_h, img_w, img_c = img.shape
    # 출력 동영상 파일 생성
    out = cv2.VideoWriter(output_path,cv2.VideoWriter_fourcc(*'DIVX'), fps, (img_w,img_h))
    
    while ret:
        ret, img = cap.read()
        if not ret:
            break

        # 한 프레임 생략
        cap.grab()

        text = "입력하고싶은 글자"
        font = cv2.FONT_HERSHEY_SIMPLEX # 글자 폰트
        fontSize = 1 # 글자 크기
        color = (255,255,255) # 글자 색
        thickness = 1 # 글자 굵기
        cv2.putText(img, text, (x,y), font, fontSize, color , thickness, cv2.LINE_AA)
        
        # 이미지 입력
		out.write(img)

    # 동영상 릴리즈
    out.release()

 

반응형