- cv2.VideoCapture 클래스
- OpenCV 에서는 카메라와 동영상으로부터 프레임 ( 을 받아오는 작업을 cv2.VideoCapture 클래스 하나로 처리함
- 카메라 열기
cv2.Videocapture(index,apiPreference=None) -> retval
• index: camera_id + domain_offset_id 시스템 기본 카메라를 기본 방법으로 열려면 index 에 0 을 전달
• apiPreference : 선호하는 카메라 처리 방법을 지정
• retval: cv2.VideoCapture 객체
cv2.VideoCapture.open(index,apiPreference=None) ->retval
• retval: 성공하면 True, 실패하면 False
- 동영상, 정지영상 시퀀스, 비디오 스트림 열기
cv2.VideoCapture(filename,apiPreference=None) ->retval
- 비디오 캡쳐가 준비되었는지 확인
cv2.VideoCapture.isOpened() -> retval
- 프레임 받아오기
cv2.VideoCapture.read(image=None) -> retval, image
• retval : 성공하면 True, 실패하면 False.
• image: 현재 프레임 (numpy.ndarray)
- 카메라, 비디오 장치 속성 값 참조
cv2.VideoCapture.get(propId) -> retval
cv2.VideoCapture(propId,value) ->retval
• propId : 속성 상수
• value: 속성 값
• retval: 성공하면 True, 실패하면 False.
- 카메라 처리 예제
import sys
import cv2
'''
카메라 열기
cap = cv2.VideoCapture()
cap.open(0)
'''
cap=cv2.VideoCapture('video1.mp4')
# cap=cv2.VideoCapture(0)
if not cap.isOpened():
print('camera open failed!')
sys.exit()
w= cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h=cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
print(w,h)
'''
카메라 장치 사이즈 세팅
cap.set(cv2.CAP_PROP_FRAME_WIDTH,320)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,240)
'''
while True:
ret,frame=cap.read() #순서 중요
if not ret:
break
edge=cv2.Canny(frame,50,150) #윤곽선 저장
cv2.imshow('frame',frame)
cv2.imshow('edge',edge)
if cv2.waitKey(20)==27:
break
cap.relase()
cv2.destroyAllWindows()
- cv2.VideoWriter 클래스
• OpenCV 에서는 cv2.VideoWriter 클래스를 이용하여 일련의 프레임을 동영상 파일로 저장할 수 있음
• 일련의 프레임은 모두 크기와 데이터 타입이 같아야 함
- Fourcc (4-문자 코드, four character code)
- 저장을 위한 동영상 파일 열기
cv2.VideoWriter(filename,fourcc,fps,frameSize,isColor=None) -> retval
- fps: 초당 프레임수 ex)30
- framsize: 프레임 크기 (width, height) 튜플
- isColor: 컬러영상이면 True, 그렇지않으면 False
- retval: cv2.VideoWriter 객체
- 프레임 저장하기
cv2.VideoWriter.write(image) -> None
• image: 저장할 프레임 (numpy.ndarray)
- 웹카메라 입력을 동영상으로 저장하기
import sys
import cv2
cap=cv2.VideoCapture(0)
if not cap.isOpened():
print('Camer open failed!')
sys.exit()
w=round(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h=round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps=cap.get(cv2.CAP_PROP_FPS)
fourcc=cv2.VideoWriter_fourcc(*'DIVX') #*'DIVX' = 'D','I','V','X'
delay=round(1000/fps) #한 프레임과 다음 프레임 사이의 시간(ms)
out=cv2.VideoWriter('output.avi',fourcc,fps,(w,h))
if not out.isOpened():
print('File open failed!')
cap.release()
sys.exit()
while True:
ret,frame=cap.read()
if not ret:
break
# inversed=~frame #좌우반전
edge=cv2.Canny(frame,50,150)
edge_color=cv2.cvtColor(edge,cv2.COLOR_GRAY2BGR) #videowritter 객체는 컬러영상을 저장하도록 만들었기 때문에
out.write(edge_color)
cv2.imshow('frame',frame)
cv2.imshow('edge',edge)
cv2.imshow('edge_color',edge_color)
if cv2.waitKey(delay)==27:
break
cap.release()
out.release()
cv2.destroyAllWindows()
'Computer Vision > opencv(python)' 카테고리의 다른 글
[11] 동영상 전환 이펙트 (2) | 2021.03.16 |
---|---|
[10] 키보드, 마우스, 트랙바 이벤트 처리하기 (0) | 2021.03.16 |
[08] 4) OpenCV 그리기 함수 (2) | 2021.03.13 |
[07] 3) 마스크 연산과 ROI (0) | 2021.03.13 |
[06] 2) 영상의 생성, 복사, 부분 영상 추출 (0) | 2021.03.12 |