프로그래밍/파이썬

파이썬 - 동영상 파일 연필효과

31weeks 2021. 6. 26. 23:24
728x90
반응형

'New File' 아이콘을 클릭하고 파일 이름을 'movie_pen.py'로 생성한 후, 아래의 코드를 입력한다.

 

import cv2
import time
import random

cap = cv2.VideoCapture('1.mp4') # 1.mp4

w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
out = cv2.VideoWriter('output_%s.mp4' % time.time(), fourcc, cap.get(cv2.CAP_PROP_FPS) / 1, (w, h))

 # 1/2배속 동영상으로 저장할 경우 : cap.get(cv2.CAP_PROP_FPS) / 2 
 # VideoWriter 동영상 저장


while cap.isOpened():
    ret, img = cap.read()  # 한프레임씩 불러옴
    if not ret:
        break

    if random.random() > 0.9: # 랜덤으로 10%의 프레임만 랜덤으로 흔들리게 한다
        theta = random.randint(-3, 3) # 랜덤으로 회전하는 효과 (-3도 ~ +3도, 흔들리는 효과를 내기 위해서)
        x, y = random.randint(-10, 10), random.randint(-10, 10) # 랜덤으로 상하좌우 흔들리는 효과 (상,하,좌,우 각각 10, 흔들리는 효과를 내기 위해서)

        M = cv2.getRotationMatrix2D(center=(w // 2, h // 2), angle=theta, scale=1.0)
        M[0, 2] += x
        M[1, 2] += y

        img = cv2.warpAffine(img, M=M, dsize=(w, h))

    img = cv2.GaussianBlur(img, ksize=(9, 9), sigmaX=0) #가우시안 블러 효과

    # sigma_S, sigma_r, shade_factor 범위 참고
    '''
    sigma_s: Range between 0 to 200. Default 60.
    sigma_r: Range between 0 to 1. Default 0.07.
    shade_factor: Range between 0 to 0.1. Default 0.02.
    '''
    gray, color = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.05, shade_factor=0.015) # 연필효과


    cv2.imshow('gray', gray)
    # cv2.imshow('color', color)

    out.write(cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR))

    if cv2.waitKey(1) == ord('q'):
        break

out.release()
cap.release()

 

 

 

반응형

 

 

 

movie_pen.py

 

 

코드 작성이 완료되면, 적당한 동영상 파일을 구해서 '1.mp4'로 저장한 후, movie_pen.py 파일과 같은 폴더로 이동시켜준다.

 

 

원본 동영상 : 보아 - No.1

 

 

 

728x90

 

 

 

코드 작성과 이미지 파일 준비까지 완료되면, 'Run' 탭에서 'Run and Debug'를 클릭한 뒤, 'Python File'을 선택해서 작성된 'movie_pen.py'의 코드를 실행시키면, 1.mp4 파일이 있는 폴더에 'output_숫자.mp4' 형식의 동영상 파일이 생성된 것을 확인할 수 있다.

 

 

 

연필효과가 적용된 동영상 : 보아 - No.1

 

 

728x90
반응형