티스토리 뷰

 

[원본 이미지]

[원본 동영상]

https://www.youtube.com/shorts/ETfpt5La-Y0

[편집된 동영상]

 

    def OverlayImage2Video(video_path, image_path, output_path): #2023.10.31
        # 비디오를 읽어온다.
        video = cv2.VideoCapture(video_path)

        # 이미지를 읽어온다.
        image = cv2.imread(image_path)

        # 비디오의 프레임 개수를 가져온다.
        frame_count = int(video.get(cv2.CAP_PROP_FRAME_COUNT))

        # 비디오의 프레임 크기를 가져온다.
    #    frame_size = cv2.Size(video.get(cv2.CAP_PROP_FRAME_WIDTH), video.get(cv2.CAP_PROP_FRAME_HEIGHT))
        frame_size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))
        image = cv2.resize(image, frame_size)

        # 새로운 동영상을 생성한다.
        fourcc = cv2.VideoWriter_fourcc(*'mp4v')
        output = cv2.VideoWriter(output_path, fourcc, video.get(cv2.CAP_PROP_FPS), frame_size)
    #    output = cv2.VideoWriter(output_path, fourcc, video.get(cv2.CAP_PROP_FPS), (video.get(cv2.CAP_PROP_FRAME_WIDTH), video.get(cv2.CAP_PROP_FRAME_HEIGHT)))

        # 비디오의 모든 프레임을 반복한다.
        for i in range(frame_count):
            # 현재 프레임을 읽어온다.
            ret, frame = video.read()

            # 이미지를 현재 프레임에 덮어 씌운다.
            overlayed_frame = cv2.addWeighted(frame, 1, image, 0.9, 0)

            # 덮어 씌운 프레임을 출력한다.
            output.write(overlayed_frame)

        # 비디오를 닫는다.
        video.release()
        output.release()
반응형