본문 바로가기
Data Science/2) Open CV

[Python] OpenCV 카메라 & 영상 읽어오기

by 은구잇 2021. 12. 4.
728x90

이번에는 캠을 이용해서 영상을 저장하는 것을 해보았다.

영상을 저장하고 불러와서 재생시키는것!

 

1.  cv2.VideoCapture(0)

  • 비디오 객체 생성
  • 인자 : 어떤 카메라를 사용할건지 ( 카메라가 2개라면 첫번째 웹캠은 0, 두번째 웹캠은 1로 지정가능 ) 또는   비디오 파일 이름을 지정
  • 언제 사용하는지?

        - 카메라에서 영상을 가져올때
       - 동영상 파일을 읽어올때
       - youtube 영상을 가져올대
       - web 영상을 받아올때

 

2. VideoCapture.Set  

비디오 프레임 가로 세로 길이 지정

cap.set(3, 1280) -> 3이 가로라는 의미, 1280 은 가로 길이

cap.set(4,720) -> 4가 세로라는 의미, 720은 세로길이

 

3. VideoCaputre.read()

재생되는 비디오를 한 프레임씩 읽어들이는 함수.

retval : 비디오 값을 제대로 읽어오는지 참과 거짓 값으로 받아오는 변수

while문 안에서 키보드 입력을 기다리며 계속 read 하기.

 

4. VideoCapture.release()

오픈한 비디오캡쳐 객체를 release() 메소드를 사용해서 파일 닫아주기

 

 

<캠을 재생하는 코드>

만약 실시간 영상이 아니라 저장된 파일을 불러오고싶다면 

함수 파라미터에 비디오 파일을 받아올 변수 이름을 써주고

VideoCapture('파일이름') 형식으로 불러오면 된다.

 

 

5. cv2.VideoWrite(filename, fourcc,fps,frameSize)

비디오 녹화하고 저장하는 함수

  • outputFile (str) – 저장될 파일명
  • fourcc – Codec정보. cv2.VideoWriter_fourcc()
  • frame (float) – 초당 저장될 frame
  • size (list) – 저장될 사이즈(ex; 640, 480)

6. VideoWrite.write 객체

write메소드에 인자로 프레임 이미지를 전달하면 객체를 생성할 때 설정한 그대로 파일이 생성되며

그 파일에 프레임 이미지가 저장됨.

 

7. 대칭 flip

read 메소드로 읽은 후 flip 코드를 적용시키면 이미지가 좌우 반전되어 읽혀짐.

 

# 이슈사항

키보드 입력을 받아오는 waitKey(1) 부분이 기존에는 0으로 설정이 되어있었다.

0으로 설정된 상태에서는 캠에서 녹화되는 거 같지가 않고 키보드 입력을 했을때에만 캡쳐 형식으로 

이미지가 저장이 되는 현상이 발생했다.

 

비디오 형태가 아니라 움짤처럼?

그래서 찾아보니까 while문 안에서 키보드 입력을 무한대기 하고있기때문에

엔터키를 누르거나 키보드 입력이 있었을때 프레임을 저장하게 되는 거였다.

그래서 1ms 대기하도록 설정을 하니까 프레임이 영상형태로 잘 저장이 되었다.

 


writeVideo()  # 비디오가 저장됨

readVideo('mycam.mp4')  #저장된 비디오 불러오기