OpenCV

[OpenCV_01_06_프레임 지정해서 영상 읽기]

선호하는 2022. 12. 9. 21:00
import cv2

video_file = './Boy.mp4' # 동영상 파일 경로

cap = cv2.VideoCapture(video_file) # 동영상 캡쳐 객체 생성
if cap.isOpened():                 # 캡쳐 객체 초기화 확인
    fps = cap.get(cv2.CAP_PROP_FPS) # 프레임 수 구하기
    delay = int(1000/fps)
    print("FPS: %f, Delay: %dms" %(fps, delay))

    while True:
        ret, img = cap.read()      # 다음 프레임 읽기
        if ret:                     # 프레임 읽기 정상
            cv2.imshow(video_file, img) # 화면에 표시
            cv2.waitKey(delay)            # fps에 맞게 시간 지연
        else:
            break                   # 다음 프레임 읽을 수 없슴, 재생 완료
else:
    print("can't open video.")      # 캡쳐 객체 초기화 실패
cap.release()                       # 캡쳐 자원 반납
cv2.destroyAllWindows()

 

cv2.VideoCapture().get(propId) - 영상의 속성 값 읽어오기

  cv2.CAP_PROP_FRAME_WIDTH  - 프레임 너비

  cv2.CAP_PROP_FRAME_HEIGHT - 프레임 높이

  cv2.CAP_PROP_FPS - 초당 프레임 수

  cv2.CAP_PROP_FRAME_COUNT - 영상의 총 프레임 수

  cv2.CAP_PROP_POS_MSEC - ms단위의 현재 위치

  cv2.CAP_PROP_POS_FRAMES - 현재 프레임 번호

  cv2.CAP_PROP_EXPOSURE - 노출

import cv2

video_file = './Boy.mp4' # 동영상 파일 경로

cap = cv2.VideoCapture(video_file) # 동영상 캡쳐 객체 생성
if cap.isOpened():                 # 캡쳐 객체 초기화 확인
    fps = cap.get(cv2.CAP_PROP_FPS) # 프레임 수 구하기
    delay = int(1000/fps)
    FRAME_WIDTH = cap.get(cv2.CAP_PROP_FRAME_WIDTH )
    FRAME_HEIGHT  = cap.get(cv2.CAP_PROP_FRAME_HEIGHT )
    FPS = cap.get(cv2.CAP_PROP_FPS )
    FRAME_COUNT = cap.get(cv2.CAP_PROP_FRAME_COUNT )
    POS_MSEC = cap.get(cv2.CAP_PROP_POS_MSEC )
    POS_FRAMES = cap.get(cv2.CAP_PROP_POS_FRAMES )
    EXPOSURE= cap.get(cv2.CAP_PROP_EXPOSURE)

    print("FRAME_WIDTH: %.2f\nFRAME_HEIGHT: %.2f\nFPS: %.2f\nFRAME_COUNT: %.2f\nPOS_MSEC: %.2f\nPOS_FRAMES: %.2f\nEXPOSURE: %.2f" 
          %(FRAME_WIDTH, FRAME_HEIGHT, FPS, FRAME_COUNT, POS_MSEC, POS_FRAMES, EXPOSURE))

    while True:
        ret, img = cap.read()      # 다음 프레임 읽기
        if ret:                     # 프레임 읽기 정상
            cv2.imshow(video_file, img) # 화면에 표시
            cv2.waitKey(delay)            # fps에 맞게 시간 지연
        else:
            break                   # 다음 프레임 읽을 수 없슴, 재생 완료
else:
    print("can't open video.")      # 캡쳐 객체 초기화 실패
cap.release()                       # 캡쳐 자원 반납
cv2.destroyAllWindows()
FRAME_WIDTH: 960.00
FRAME_HEIGHT: 540.00
FPS: 29.97
FRAME_COUNT: 600.00
POS_MSEC: 0.00
POS_FRAMES: 0.00
EXPOSURE: 0.0

해당 영상은 초당 30프레임으로 전체 600개의 프레임을 960*540크기로 출력해주는 영상인 것을 알 수 있다.

'OpenCV' 카테고리의 다른 글

[OpenCV_01_08_사진 찍기]  (0) 2022.12.10
[OpneCV_01_07_프레임 크기 수정하기]  (0) 2022.12.09
[OpenCV_01_05_카메라 불러오기]  (0) 2022.12.08
[OpenCV_01_04_비디오 불러오기]  (1) 2022.12.08
[OpenCV_01_03_이미지 저장하기]  (0) 2022.12.07