Pythonで動画を自動二値化する方法|画像処理を簡単に実現する手法

Pythonを使って、動画を自動で二値化できる方法ってあるのかな…。データの分析用に動画を処理したいけど、画像処理は難しそう…。
猫男
猫男
catman
catman
そんな時は、Pythonで動画を処理する方法を学ぶと良いよう。特にOpenCVを使えば、動画の各フレームを二値化しやすくなるんだ。

 

PythonとOpenCVで動画の二値化を行う方法

PythonとOpenCVを使うことで、動画の処理を簡単に実現できます。

特に、動画の二値化には幅広い利用方法があります。

このセクションでは、Pythonで動画を二値化する手法について説明します。

 

OpenCVとは

OpenCVは、画像および動画処理のための非常に強力なライブラリです。

多くのプラットフォームで利用でき、画像分析、コンピュータビジョン、画像補正など多くの機能を提供します。

Pythonとの組み合わせで、動画や画像の処理を自動化するのに非常に役立ちます。

 

PythonとOpenCVをインストールする

始めるためには、まずOpenCVをインストールします。

Pythonのパッケージ管理ツールであるpipを使って、次のようにインストールできます。

pip install opencv-python

これで環境が整いました。

次に、二値化を行うためのコードを書いていきます。

 

動画を読み込み、フレームを二値化する

動画ファイルの各フレームを読み込み、二値化する方法を紹介します。

まず、動画を読み込み、次にフレームの二値化を行います。

 

Pythonコード

import cv2

def binarize_video(video_path, output_path):
    # 動画ファイルを開く
    cap = cv2.VideoCapture(video_path)
    # 取得したいフレームサイズを取得
    frame_size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
    # 出力ファイルの設定
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter(output_path, fourcc, 30.0, frame_size, isColor=False)

    while True:
        # フレームを1枚ずつ取得
        ret, frame = cap.read()
        if not ret:
            break

        # グレースケールへ変換
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # フレームを二値化
        _, binary_frame = cv2.threshold(gray_frame, 127, 255, cv2.THRESH_BINARY)

        # 二値化したフレームを出力
        out.write(binary_frame)

    # リソースの解放
    cap.release()
    out.release()

# 使用例
binarize_video('input_video.mp4', 'output_video.mp4')

このコードを実行すると、input_video.mp4という動画ファイルがoutput_video.mp4という二値化された動画ファイルに変換されます。

 

コードの意味

主要な部分を見ていきましょう。

指定 意味
cv2.VideoCapture 指定した動画ファイルを開く
cv2.cvtColor フレームをグレースケールに変換する
cv2.threshold 画像を指定した閾値で二値化する
cv2.VideoWriter 指定した設定で動画を書き出す

cv2.thresholdの第2引数である127を変更することで、二値化のしきい値を設定できます。

たとえば、しきい値を100にしたい場合は次のようにします。

_, binary_frame = cv2.threshold(gray_frame, 100, 255, cv2.THRESH_BINARY)

 

動画もPythonで二値化できるなんてすごいですね!これならデータ解析の準備もスムーズに進められそうです。
猫男
猫男
catman
catman
その通りだよう。二値化することで、データの解析や視覚的特徴の抽出がより簡単になるから、積極的に使ってみるといいさ。

 

GIF動画の二値化も可能

GIF形式の動画も二値化できます。

一部のプロジェクトでは、MP4以外にGIFのような軽量な動画形式での処理が必要な場合があります。

 

PythonコードでのGIF動画二値化

import cv2
from PIL import Image

def binarize_gif_video(input_path, output_path):
    # GIFを開く
    gif = Image.open(input_path)
    frames = []

    try:
        while True:
            frame = gif.copy()
            frame = frame.convert('L')
            # 直接PILのImageのメソッドを使い二値化
            frame = frame.point(lambda x: 0 if x < 128 else 255, '1')
            frames.append(frame)
            gif.seek(gif.tell() + 1)
    except EOFError:
        pass

    # フレームを保存
    frames[0].save(output_path, save_all=True, append_images=frames[1:], loop=0, duration=gif.info['duration'])

# 使用例
binarize_gif_video('input.gif', 'output.gif')

このコードを実行すると、input.gif二値化されたoutput.gifに変換されます。

 

PILとOpenCVの違い

PIL(Python Imaging Library)は画像処理における基本的なライブラリで、Pythonの標準的な画像処理ツールとして広く使われています。

一方、OpenCVはより進んだコンピュータビジョンの機能を提供します。

適切なライブラリを選んで効率的に処理を行うことが重要です。

 

まとめ

Pythonを用いることで、動画を二値化することが可能です。

この記事では、OpenCVを使用して、動画を簡単に自動で二値化する方法を説明しました。

以下にまとめます。

  • PythonとOpenCVで動画を簡単に二値化できる
  • しきい値を調整することで異なる結果が得られる
  • GIF動画もPILを使って二値化可能
  • 画像や動画処理の際には、適切なライブラリ選択が重要である

Pythonによる動画処理で、データ分析や動画の視覚効果を高めるツールとして役立ててください。

 

これなら簡単にデータの前処理が進められますね!動画の特徴を捉えやすくなりそうです。
猫男
猫男
catman
catman
その通りだよ。PythonとOpenCVを駆使して、効率的にプロジェクトを進めると良いよう。動画の可能性が広がるさ。

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。