OpenCV에서 편집 한 동영상을 저장할 수 없어 이미 돌아 왔습니다.

태그가 혼돈이 되네요 ... 웃음

음, 환경이지만
MAC OS X 10.14.4
파이썬 3.7.3
Opencv 3.4.2
PIL 5.4.1

하고 싶었던 일



프레젠테이션으로 캐니 엣지 처리를 한 동영상을 보여주고 싶어서 저장하고 싶었어요.
OpenCV를 사용하면 캐니 에지 처리를 매우 쉽게 할 수 있습니까?

out.write(frame)을 사용하여 동영상을 만들면


동영상이 258바이트는 있을 수 없네요. 원래 재생할 수 없고.

여러가지 조사했지만 이미 저장할 수 있으면 좋을까 다시 열었다



ffmpeg로 연속 이미지 생성

   ↓

PIL로 이미지 로드

   ↓

OpenCV에서 CannyEdge 처리

   ↓

PIL로 이미지 저장

   ↓

ffmpeg로 연속 이미지를 동영상으로 되돌리기

구체적인 절차



input.mp4에서 연속 이미지를 만듭니다.
ffmpeg -i input.mp4 -vcodec png image_%03d.png

연속 이미지
image_001.png
image_002.png
...
image_125.png
이런 식으로 할 수 있습니다.

이 연속 이미지를 OpenCV에서 편집하는 것이지만 저장 부분을 사용할 수 없었기 때문에
PIL을 이용하여 이미지를 저장합니다.

코드는 다음

CannyEdge.py
import numpy as np
from PIL import Image
import cv2

#img file
pic_start = 1
pic_finish = 125

for i in np.arange(pic_start,pic_finish+1):
  #扱っている画像を表示
  print("\r{:}".format(i),end = "")

  #open image
  im = Image.open("image_{:0=3}.png".format(i))

  #OpenCVに渡すためにnumpyに変換
  open_im = np.asarray(im)

 #CannyEdge処理
  edges = cv2.Canny(open_im, 100, 150)

  #save image
  pil_im = Image.fromarray(edges)
  pil_im.save("image2_{:0=3}.png".format(i))

그리고 마지막으로 새로운 연속 이미지를 ffmpeg로 동영상으로 되돌립니다.
ffmpeg -r 30 -i image2_%03d.png -vcodec libx264 -pix_fmt yuv420p -r 30 out.mp4

이렇게하면 캐니 에지 처리 된 out.mp4를 저장할 수 있습니다.
OpenCV 편리하지만 가끔 ...

좋은 웹페이지 즐겨찾기