반응형
먼저 코드를 보여드리고 설명드리겠습니다
import cv2
import os, datetime
class capture():
def __init__(self,ip,id,pw,rport,):
self.ip = ip
self.id = id
self.pw = pw
self.rport = rport
self.url = f'rtsp://{id}:{pw}@{ip}:{rport}/cam0_0'
def video(self):
cap = cv2.VideoCapture(self.url)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = 15
t = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.avi'
if not os.path.isdir('C:\Video') : os.mkdir('C:\Video')
path = os.path.join('C:\Video',t)
out = cv2.VideoWriter(path, fourcc, fps, (width,height))
while True:
_, frame = cap.read()
out.write(frame)
frame = cv2.resize(frame, dsize=(0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
cv2.imshow('recoding',frame)
k = cv2.waitKey(1) & 0xff
if k == 27: break
cap.release()
out.release()
cv2.destroyAllWindows()
test = capture('192.168.0.48','root','root','554')
test.video()
코드설명
fourcc = cv2.VideoWriter_fourcc(*'XVID')
- 비디오를 저장할 코덱을 지정하는 부분입니다
- DIVX ( DIVX MPEG-4) , FMP4 ( FFMPEG MPEG-4) , X264 (H.264/AVC) , MJPG (Motion-JPEG) 등이 있습니다
- 코덱마다 지원하는 확장자들이 다릅니다 avi mov mp4 등
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = 15
- 영상의 높이, 넓이를 가져는 부분입니다
- 동영상 파일로 저장할 때 해상도를 지정해 줄 변수입니다
- fps 는 1초에 몇장의 이미지를 저장할지 지정한 변수입니다
t = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.avi'
if not os.path.isdir('C:\Video') : os.mkdir('C:\Video')
path = os.path.join('C:\Video',t)
out = cv2.VideoWriter(path, fourcc, fps, (width,height))
cv2.VideoWriter(filename, fourcc, fps, frameSize, isColor)
filename : 비디오 파일 이름 ( 파일의 경로가 포함되어 있어야 합니다)
fourcc : 코덱명
fps : 초당 프레임 수
frameSize : 프레임 크기. 튜플로 지정해 주어야 합니다
isColor : True일시 컬러, False 흑백. 기본값은 True
- t는 동영상 파일의 이름을 지정한 변수입니다 저는 datatime 모듈을 이용해 현재시간의 연-월-일-시-분-초.avi로 저장할 것입니다
- 두번째줄은 C드라이브에 Video 폴더가 있는지 검사하고 없으면 폴더를 생성하는 부분입니다
- path는 동영상 파일 저장 경로입니다.
- out 변수의 설명은 위 VideoWriter 설명란에 있습니다
out.write(frmae)
- 현재 이미지(frame)를 out에 저장합니다
frame = cv2.resize(frame, dsize=(0,0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
- 제 카메라 해상도가 FHD(1920*1080)로 모니터 화면을 가득 채워서 imshow로 보여질 이미지 사이즈를 줄여줬습니다
- 자세한 설명은 다른 포스팅에서 따로 하겠습니다
out.release()
드디어 제대로 사용할 곳이 생겼습니다
영상을 저장하고 닫는 부분입니다
그대로 가져다 fps만 카메라 설정값에 맞춰서 사용하시면 문제 없습니다
'파이썬 > OpenCV' 카테고리의 다른 글
파이썬 모듈 : OpenCV 가장자리 검출 (0) | 2023.03.26 |
---|---|
파이썬 모듈 : OpenCV 이미지 확대, 회전, 자르기 (0) | 2023.03.25 |
파이썬 모듈 : OpenCV 읽기, 쓰기, 필터링 (0) | 2023.03.24 |
이미지의 크기 변환 cv2.resize() (0) | 2022.11.17 |
CV2로 IPCAMERA 영상을 출력해보자 (0) | 2022.11.16 |