VideoCapture(string filename, int apiPreference = CAP_ANY)
VideoCapture객체 생성
bool VideoCapture::open(String& filename, int apiPreference = CAP_ANY)
C++에서는 별도 open함수를 호출해야 하지만 파이썬에서는 바로 사용 가능
하지만 isOpened() 함수를 통해 제대로 파일 불러왔는지 확인 필요!
apiPreference : 사용할 비디오캡쳐 API 백엔드
성공하면 true, 실패하면 false 리턴
VideoCapture::get(VideoCapture::~)
열려있는 파일로부터 여러 정보 받아오기 위해 사용
상수 | 설명 |
---|---|
CAP_PROP_POS_MSEC | 비디오 파일에서 현재 위치(msec) |
CAP_PROP_POS_FRAMES | 현재 프레임 위치 |
CAP_PROP_POS_AVI_RATIO | 0~1 구간으로 표현한 상대적 프레임 위치 |
CAP_PROP_POS_WIDTH | 프레임 가로 크기 |
CAP_PROP_POS_HEIGHT | 프레임 세로 크기 |
CAP_PROP_POS_FPS | 초당 프레임 수 |
CAP_PROP_FRAME_COUNT | 비디오파일 전체 프레임 수 |
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Camera oepn failed!")
exit()
print('Frame width: ', int(cap.get(cv.CAP_PROP_FRAME_WIDTH)))
print('Frame height:', int(cap.get(cv.CAP_PROP_FRAME_HEIGHT)))
bool VideoCapture::read(OutputArray image)
while True:
ret, frame = cap.read() # 읽음
if not ret:
break
inversed = ~frame
cv.imshow('frame', frame) # 읽은 영상 표출
cv.imshow('inversed', inversed)
if cv.waitKey(10)==27:
break
cv.destroyAllWindows() # 모든 화면 닫기
카메라 장치 열 경우 VIdeoCapture의 생성자에 문자열이 아니라 정수값 전달
index = carema_id + domain_offset_id
컴퓨터 한대에 카메라 하나면 camera_id =0
domain_offset_id : 카메라 장치를 사용하는 방식을 표현하는 정수
보통은 자동 선택(CAP_ANY) 사용 -> 0 들어감
반복문으로 카메라에서 프레임 받고 나면 각 프레임에 정지영상 처리기법 사용 가능
고유의 코덱을 이용하여 압축된 형태로 저장
OpenCV는 MPEG-4, H.264 코덱 해석기능 제공
동영상 파일일 경우 FPS(Frame Per Sec) 가지고 있음
이를 이용하면 매 프레임 사이 시간간격 계산 가능
delay = round(1000 / fps)
이를 이용하면 waitKey 함수 인자로 사용가능
VideoWriter 클래스 사숑
VideoWriter::VideoWriter(string& filename, int fourcc, double fps, Size frameSize, bool isColor = true);
성공하면 true, 실패하면 false