動画の作成

動画を作成するために、まずは各時刻での絵を順番に描いていく作業を関数とする。

def PlotContour2():
    color = 'r'
    num = 0

    fig = figure()
    ax = fig.add_subplot(111)
    for k in range(1, Util.dam_dam[0]+1):
        num += 1
        ion()
        for i in range(Util.sens_num_ini+8):
            if i >= 122:
                color = '#FFFFFF'
            elif int(Util.dam_dam[k][i][0]) == 3:
                color = '#CC0033'
            elif int(Util.dam_dam[k][i][0]) == 2:
                color = '#FFCC99'
            elif int(Util.dam_dam[k][i][0]) == 1:
                color = '#FFFF33'
            elif int(Util.dam_dam[k][i][0]) == 0:
                color = '#FFFFFF'
            
            x = Util.cordx[i]
            y = Util.cordy[i]
            ax.fill(x, y, color)
            ax.axis('off')
            ax.text(5,100,"Front", fontsize=20)
            ax.text(53,100,"Back", fontsize=20)
            line, = fill(x, y, color)
        draw()

        filename = 'anim' + str(num)
        fig.savefig(filename)

とりあえず、こうした。このままだといろいろ問題がある。

  • ion()をコメントアウト---インタラクティブモードがオンだと、図を描く過程が見える。しかし、無駄な時間がかかるのでオフにする。→処理が少し速くなる。
  • このルーチンを実行すると、PCのファンの回転音が大きくなる。CPUをほとんど占有してしまう。PCのスペックにきっと依存するから気にしない。
  • 変数numはいらない。kで代用できる。
  • fig.add_subplot(111)は必ず必要。
  • line, =... はいらない。
  • draw() はいらない。
  • IF文の箇所をより簡潔に書く。

以上を踏まえて、修正すると下のようになった。

def PlotContour2():
    """ 動画の作成 """
    fig = figure()
    ax = fig.add_subplot(111)
    colors = ['#FFFFFF', '#FFFF33', '#FFCC99', '#CC0033']

    for k in range(1, Util.dam_dam[0]+1):
        for i in range(Util.sens_num_ini+8):
            if i >= 122:
                color = colors[0]
            else:
                color = colors[int(Util.dam_dam[k][i][0])]
            
            x = Util.cordx[i]
            y = Util.cordy[i]
            ax.fill(x, y, color)
            ax.axis('off')
            ax.text(5,100,"Front", fontsize=20)
            ax.text(53,100,"Back", fontsize=20)

        filename = 'anim' + str(k)
        fig.savefig(filename)
        print u"info> 動画用の%s番目の画像を保存しました。ファイル名は%sです。"\
              % (k, filename)
    print u"info> 動画作成を終了します。"

これで、一連の画像をpngファイルに出力することができるようになった。
やっとできた。手間かけすぎ。

次の作業としては、

  • 各画像の中で時刻を表示したい。→ax.textを使えば簡単だろう。
  • 各画像の中に事前に用意してある他の画像ファイルを入れ込む。→分からないから調べる。
  • 一連の画像を動画にまとめる部分を実装する。→動画作成プログラムを決めることから。

をやらなくては。