VisualStudio2017에서 Python3/OpenCV를 사용하여 동영상 처리

소개



갑자기 이미지와 동영상을 가공하고 싶어지고 VisualStudio2017에서 Python3/OpenCV를 사용해 보았습니다.

이 기사의 연속입니다.
VisualStudio2017에서 Python3/OpenCV를 사용하여 이미지 표시

구현



했던 일



구현된 처리



· 동영상 로드
· 세로 100px, 가로 200px를 잘라
· 동영상 표시
· 동영상 저장

※gif 형식에서는 동영상의 입출력을 할 수 없었으므로, 수동으로 avi 형식과 gif 형식의 변환을 실시했습니다.

Before





After





샘플 소스



Sample.py
import numpy as np
import cv2

#任意のパスを指定
clip = cv2.VideoCapture("sample\path\sample_clip.avi")

#読み込んだ動画の情報を取得
clipFps = clip.get(cv2.CAP_PROP_FPS)
clipHeight = clip.get(cv2.CAP_PROP_FRAME_HEIGHT)
clipWidth = clip.get(cv2.CAP_PROP_FRAME_WIDTH)

#対応してないコーデックを指定すると、上手く動画が出力されない
codec = cv2.VideoWriter_fourcc(*'DIVX')

#出力する動画の情報を指定
editedClipHeight = 100
editedClipWidth = 200

#出力先の任意のパスを指定
outputPathAndFilename = 'sample\path\output.avi'

#出力する動画の解像度と指定した解像度がずれると、上手く動画が出力されない
clipWriter = cv2.VideoWriter(outputPathAndFilename, codec, clipFps, (editedClipWidth, editedClipHeight))

while(clip.isOpened()):
    ret, frame = clip.read()
    if ret == True:

        #左上を起点に、[縦100px, 横200px]を切り出す
        editedClip = frame[0:editedClipHeight,0:editedClipWidth]

        clipWriter.write(editedClip)
        cv2.imshow('SampleClip', editedClip)

    #[ q ]を押すと表示が終了する
    if cv2.waitKey(25) & 0xFF == ord('q'):
        break

clip.release()
clipWriter.release()
cv2.destroyAllWindows()

빠진 포인트



아무것도 생각하지 않고 아래의 소스를 복사하면 동영상을 잘 저장할 수 없었기 때문에 비망.
동영상 저장 — 동영상 처리 — OpenCV-Python Tutorials 1 documentation

아래와 같은 현상이 발생하고 있었습니다만, 재설정으로 해결했습니다.

파일은 출력된다.
그러나 재생하려고해도 동영상이 흐르지 않는다.
파일 속성을 확인하면 크기가 작습니다.

다른 해결책을 아시는 분이 있으면 가르쳐 주셨으면 합니다.

1. 지원되지 않는 코덱을 지정합니다.



Sample.py
#対応してないコーデックを指定すると、上手く動画が出力されない
codec = cv2.VideoWriter_fourcc(*'DIVX')

환경에 따라 사용 가능한 코덱이 다르게 보입니다.

2. 출력하는 동영상의 해상도와 VideoWriter에서 지정한 해상도가 다름



Sample.py
#出力する動画の解像度と指定した解像度がずれると、上手く動画が出力されない
clipWriter = cv2.VideoWriter(outputPathAndFilename, codec, clipFps, (editedClipWidth, editedClipHeight))

참고 자료



동영상 처리하기 — OpenCV-Python Tutorials 1 documentation

좋은 웹페이지 즐겨찾기