opencv라이브러리와, Pycharm을 활용해 진행하도록 하겠습니다.
파이썬 설치가 되어있지 않으시다면,
아래 URL을 확인하시고 파이썬 설치 먼저 진행 부탁드리겠습니다.
pycharm설치
아래 경로에서 원하는 os의 설치파일을 다운로드 후 next,next해주시며 다운로드 하시면됩니다.
https://www.jetbrains.com/pycharm/
opencv 설치
cmd를 열고 아래 명령어를 입력해 opencv라이브러리를 설치합니다.
명령어 : pip install opevncv_python
먼저 샘플 영상 하나를 준비합니다. 저는 어벤저스 트레일러를 다운받아 두었습니다.
c:\vod 경로에 mp4파일을 업로드 해두었습니다.
코드 구현
먼저 아래 코드를 복사 해서 실행해보면(파일 경로는 본인의 경로로 바꿔주어야 합니다)
팝업창이 하나가 생성되며 동영상이 재생되는 것을 확인 할 수 있습니다.
# 동영상 프로세싱 import cv2
cap = cv2.VideoCapture("C:/vod/avenger.mp4")
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
## 비디오가 정상적으로 열렸는지 확인 while (cap.isOpened): ret, frame = cap.read()
if ret: cv2.imshow("video", frame)
k = cv2.waitKey(33) if k == 27: break else: break cap.release() cv2.destroyAllWindows()
|
동영상은 여러 이미지의 연속된 출력입니다. 움직임을 영상으로 찍는 것은
곧, 연속촬영 이미지를 빠르게 넘기는것과 같습니다.
따라서 각 연속된 이미지를 나눠 하나의 이미지를 추출하는 것이 캡처라고 볼 수 있습니다.
위 코드는 VideoCapture함수를 통해 설정한 경로에 위치한 영상파일을 연속된 프레임으로 쪼개 출력하는 코드입니다.
(저의 경우 영상파일이 존재하는 디렉토리를 절대경로로 지정을 해두었습니다.)
cs2.imshow() 코드는 팝업창을 띄워 하나의 프레임을 출력하는 함수입니다.
while문을 통해 cs2.imshow()가 실행되며, 연속된 프레임이 출력되어 영상을 재생 하게 됩니다.
cv2.waitKey(33) 은 33ms 동안 특정 입력이 들어 올때까지 대기한다는 뜻입니다.
해당 시간을 늘려줄 경우, 영상이 느리게 재생될 수 있습니다.
입력된 key는 특정 int값과 매핑됩니다.
ESC : 27 로 esc를 누를 경우 팝업창이 종료되도록 구현되어 있습니다.
다른 KEY코드 매핑 TABLE은 아래 URL 참고 하시면 됩니다.
위 코드를 실행해보면, 아래와 같이 팝업창이 생성되며 영상이 재생되는 것을 알 수 있습니다.
그럼 위 코드를 통해 특정 영상의 프레임 단위로 쪼갤 수 있는 방법을 알았으니,
영상캡처를 진행해보도록 하겠습니다.
영상을 프레임단위로 가져왔던 위 코드 중 while구간만 변경해주면 됩니다.
ctrl+z시 캡처가 되도록 구현해보겠습니다.
ctrl+z 입력에 대한 number 값은 26입니다.
cv2.imwrite() 함수는 특정 이미지를 파일로 저장하는 함수입니다.
key값이 26일때 imwrite()함수로 원하는 경로에 이미지파일을 떨구도록 하겠습니다.
# 동영상 프로세싱 import datetime import cv2
capture = cv2.VideoCapture("C:/vod/avenger.mp4")
width = int(capture.get(3)) # 가로 height = int(capture.get(4)) # 세로값 가져와서
while (capture.isOpened): ret, frame = capture.read() if ret == False: break cv2.imshow("VideoFrame", frame)
now = datetime.datetime.now().strftime("%d_%H-%M-%S") key = cv2.waitKey(33) # 1) & 0xFF
if key == 27: # esc 종료 break elif key == 26: # ctrl + z cv2.IMREAD_UNCHANGED cv2.imwrite("C:/vod/capture/cap01" + ".png", frame)
capture.release() cv2.destroyAllWindows()
|
위코드를 실행하면 팝업이 올라오며 동영상이 재생되고,
제가 원하는 순간에 ctrl+z버튼을 누르면 , 아래와 같이
절대경로로 설정한 C:/vod/capture/ 디렉토리에 cap01.png 파일이 떨어지게 됩니다.
정상적으로 캡처기능이 구현된것을 확인 할 수 있습니다.
'python > 기본' 카테고리의 다른 글
[python] jupyter notebook(주피터 노트북) 사용법, how to use jupyter notebook - 윈도우 환경 (0) | 2019.10.09 |
---|---|
[python] 아나콘다(anaconda) 설치하기 -윈도우 10 (0) | 2019.10.07 |
최근댓글