前提・実現したいこと
最終目標:pythonで、左にゲーム画面、右にグラフが描画されている動画をファイルとして出力したい
実装方法:numpy行列(静止画)のリストを作り、そのリストを使って動画にしようとしています。numpy行列(静止画)の作り方はゲームのエミュレータからゲーム画面のnumpy行列を、matplotlibのpyplotからグラフを作成し、それを変換してnumpy行列を取得してそれら2つのnumpy行列を合体させて作っています。
しかし、下記のプログラムでは動作がとても遅くなってしまいます(forループで回すため)。何か高速化する方法がありましたら教えていただければ幸いです。
自分ではfig.canvas.draw()の部分で一度描画をしてしまっているためだと考えておりますが、描画をしないでnumpy行列を取得する方法が分かりません。
発生している問題
とにかく遅い。
該当のソースコード
python
1def hoge(self, frame): 2 plt.close('all') 3 x = np.linspace(0, 2*np.pi, 21) 4 y1 = np.sin(x) 5 y2 = np.cos(x) 6 y3 = y1-y2 7 fig, ax = plt.subplots() 8 ax.plot(x, y1, 'b.-') 9 ax.plot(x, y2, 'g,-.') 10 ax.plot(x, y3, 'r,-.') 11 print(plt.__file__) 12 fig.canvas.draw() 13 im = np.array(fig.canvas.renderer.buffer_rgba()) 14 im = cv2.cvtColor(im, cv2.COLOR_RGBA2RGB) 15 im = resize(im, (210,160,3)) 16 im = (im*255).astype(np.uint8) 17 synthesis = np.concatenate([frame, im], 1) 18 self.VIDEO_HEIGHT = self.GAME_HEIGHT 19 self.VIDEO_WIDTH = self.GAME_WIDTH + 160 20 return synthesis
試したこと
fig.canvas.draw()が遅い原因だと思い、消してみましたがエラーが出てできませんでした。
補足情報(FW/ツールのバージョンなど)
python3.6.7
matplotlib3.1.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。