2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenCVで編集した動画が保存できなくて、もう遠回りした

Posted at

タグがカオスになってますね...笑

さて、環境ですが
MAC OS X 10.14.4
python 3.7.3
Opencv 3.4.2
PIL 5.4.1

#やりたかったこと
プレゼンでキャニーエッジ処理をした動画を見せたくて保存したかったんですよ。
OpenCVを使うとキャニーエッジの処理がめっちゃ簡単にできるじゃないですか

out.write(frame)使って動画を作ると
スクリーンショット 2019-05-14 16.40.01.png

動画が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便利なんだけどたまにな...

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?