rueki
OpenCV로 두 가지 영상 합성해서 이어붙이기 본문
728x90
반응형
videoCapture(파일경로)
VideoWriter(저장시킬 경로 및 파일명, 코덱, fps, (너비,높이))
addWeighted - 가중치 반영
import cv2
import numpy as np
import sys
#합성시킬 두 개의 영상 열기
cap1 = cv2.VideoCapture('video1.mp4')
cap2 = cv2.VideoCapture('video2.mp4')
if not cap1.isOpened() or not cap2.isOpened():
sys.exit()
#각 영상 프레임 수
frame_cnt1 = round(cap1.get(cv2.CAP_PROP_FRAME_COUNT))
frame_cnt2 = round(cap2.get(cv2.CAP_PROP_FRAME_COUNT))
fps = cap1.get(cv2.CAP_PROP_FPS)
effect_frames = int(fps*2)
delay = int(1000/fps)
#영상 가로 세로 설정
w = round(cap1.get(cv2.CAP_PROP_FRAME_WIDTH))
h = round(cap1.get(cv2.CAP_PROP_FRAME_HEIGHT))
#비디오 코덱 설정
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('output.avi', fourcc, fps, (w,h))
#1번 영상 열기
for i in range(frame_cnt1 - effect_frames):
ret1, frame1 = cap1.read()
if not ret1:
break
out.write(frame1)
cv2.imshow('frame',frame1)
cv2.waitKey(delay)
#합성하기
for i in range(effect_frames):
ret1, frame1 = cap1.read()
ret2, frame2 = cap2.read()
#가중치 계산
#만약 i가 1인경우 alpha는 1- 1/48 , 1-alpha는 0에 가까운 값
alpha = 1.0 - i / effect_frames
frame = cv2.addWeighted(frame1, alpha, frame2, 1-alpha,0)
out.write(frame)
for i in range(effect_frames, frame_cnt2):
ret2, frame2 = cap2.read()
if not ret2:
break
out.write(frame2)
cv2.imshow('frame', frame2)
cv2.waitKey(delay)
728x90
반응형
'python' 카테고리의 다른 글
Lambda, reduce, map, filter (0) | 2021.01.05 |
---|---|
Variable Scope(변수 범위) (0) | 2021.01.01 |
Opencv tutorial(python) Template matching (0) | 2020.07.01 |
Opencv tutorial(python) 이미지 Thresholding (0) | 2020.06.25 |
Opencv tutorial(python) 1. 이미지 읽기, 컬러 채널 변경하기 (3) | 2020.06.24 |
Comments