일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Computer Vision
- 인공지능
- Convolution
- pytorch
- optimizer
- Self-supervised
- 머신러닝
- 코딩테스트
- programmers
- 프로그래머스
- object detection
- 논문리뷰
- Segmentation
- 파이썬
- 알고리즘
- transformer
- opencv
- ViT
- 코드구현
- Python
- 논문구현
- 파이토치
- 논문 리뷰
- Ai
- cnn
- 옵티마이저
- Semantic Segmentation
- Paper Review
- 논문
- 딥러닝
Archives
- Today
- Total
Attention please
[OpenCV] OpenCV를 이용한 동영상 출력 및 저장 본문
728x90
설명하기에 앞서 동영상은 여러 장의 사진들이 빠르게 넘어가는 것이라는 것을 알아두어야 한다.
다음 영상은 작업 path에 다운받아놓은 "cat_video.mp4" 파일의 영상이다.
동영상 파일 출력
위에서 말했던 것처럼 동영상은 여러 장의 사진들이 합쳐져있는 것이다. 즉, 출력할 때 역시 각 frame들을 반복적으로 출력하는 방식으로 진행된다.
import cv2
cap = cv2.VideoCapture('cat_video.mp4')
while cap.isOpened(): # 동영상 파일이 올바로 올렸는가?
ret, frame = cap.read() # ret : 성공여부, frame : 받아온 이미지(프레임)
if not ret:
break
cv2.imshow('video', frame)
# 사용자가 입력한 key값이 q일때 이미지 출력을 종료한다.
# cv2.waitKey(숫자) : 숫자의 값이 커지면 커질수록 영상 재생속도도 느려진다. 프레임이 넘겨지는 시간이 늘어나기 때문
if cv2.waitKey(1) == ord('q'): # ord함수 : 파라미터 문자의 아스키코드를 반환함 => q의 아스키 코드를 반환
break
cap.release() # 자원 해제
cv2.destroyAllWindows() # 모든 창 닫기
카메라 출력
이번에는 실제 컴퓨터에 있는 카메라로 출력되는 영상을 실시간으로 출력한다.
import cv2
cap = cv2.VideoCapture(0) # 0번째 카메라 장치 (Device ID)
if not cap.isOpened(): # 카메라가 잘 열리지 않은 경우
exit() # 프로그램 종료
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('camera', frame)
if cv2.waitKey(1) == ord('q'): # 사용자가 q를 입력하면 종료
break
cap.release()
cv2.destroyAllWindows()
동영상 저장
이번에는 위의 영상을 다시 저장한다.
영상을 저장하기에 앞서 codec을 우선 설정해준다.
# 코덱 정의
fourcc = cv2.VideoWriter_fourcc(*'DIVX') # 'D', 'I', 'V', 'X' == *'DIVX'
opencv로 설정할 수 있는 코덱의 종류는 다음과 같이 존재한다.
다음으로 frame의 크기와 FPS를 설정한다.
# 프레임 크기, FPS
width = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)/2) # 정수여야 하기때문에 round를 사용
height = round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS*2)
이제 저장을 위해 out 이라는 변수에 위에서 해주었던 설정들을 받아 저장한다.
out = cv2.VideoWriter('output.avi', fourcc, fps, (width, height))
# 저장 파일명, 코덱, FPS, 크기(width, height)
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
out.write(frame) # 영상 데이터만 저장 (소리 X)
cv2.imshow('video', frame)
if cv2.waitKey(1) == ord('q'):
break
out.release()
cap.release()
cv2.destroyAllWindows()
728x90
'OpenCV' 카테고리의 다른 글
[OpenCV] OpenCV로 이미지 전처리 하기 (0) | 2023.01.09 |
---|---|
[OpenCV] OpenCV로 도형 그리기(직선, 원, 사각형, 다각형) (0) | 2023.01.09 |
[OpenCV] OpenCV를 이용한 이미지 출력 및 저장 (0) | 2023.01.08 |
[OpenCV] OpenCV 설치 시 Building wheels for collected packages: opencv-python Building wheel for opencv-python (PEP 517) ... | 문제 발생 (0) | 2023.01.08 |
Comments