opencv라이브러리와, Pycharm을 활용해 진행하도록 하겠습니다.

 

파이썬 설치가 되어있지 않으시다면,

아래 URL을 확인하시고 파이썬 설치 먼저 진행 부탁드리겠습니다.

https://vmpo.tistory.com/entry/python-%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4anaconda-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0-%EC%9C%88%EB%8F%84%EC%9A%B0-10

 

[python] 아나콘다(anaconda) 설치하기 -윈도우 10

윈도우 10 환경에 python설치를 진행해보겠습니다. python을 단독으로 설치해도 좋지만, 아나콘다를 설치할 경우 python관련 라이브러리를 한꺼번에 받을 수 있기 때문에 초기 셋팅하기가 편리해집니다. 아나콘다..

vmpo.tistory.com

 

pycharm설치


아래 경로에서 원하는 os의 설치파일을 다운로드 후 next,next해주시며 다운로드 하시면됩니다.

https://www.jetbrains.com/pycharm/

 

PyCharm: the Python IDE for Professional Developers by JetBrains

The Python & Django IDE with intelligent code completion, on-the-fly error checking, quick-fixes, and much more...

www.jetbrains.com

 

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 참고 하시면 됩니다.

https://keycode.info/

 

JavaScript Event KeyCodes

Press any key to get the JavaScript event keycode

keycode.info

 

 

위 코드를 실행해보면, 아래와 같이 팝업창이 생성되며 영상이 재생되는 것을 알 수 있습니다.

 

 

그럼 위 코드를 통해 특정 영상의 프레임 단위로 쪼갤 수 있는 방법을 알았으니,

영상캡처를 진행해보도록 하겠습니다.

 

영상을 프레임단위로 가져왔던 위 코드 중 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 파일이 떨어지게 됩니다.

정상적으로 캡처기능이 구현된것을 확인 할 수 있습니다.

 

 

LIST
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기