Matplotlib関連
頻繁にグラフを描画する場合のメモリー消費を抑える
import matplotlibmatplotlib.interactive(False)
グラフ間の描画領域を調整する
import matplotlib.pyplot as pltplt.figure()#それぞれ0.0~1.0の実数で指定#left : 描画領域左端#right : 描画領域右端#bottom : 描画領域下端#top : 描画領域上端plt.subplots_adjust(left=left, right=right, bottom=bottom, top=top)
任意のカラーマップを作成する
from matplotlib.colors import LinearSegmentedColormapimport cv2import numpy as np### main ####各列はR,G,Bの順, alpha値を使用する場合は列を追加#0~1の値で指定color_table = [(1.0,0.0,0.0), (0.0,1.0,0.0), (0.0,0.0,1.0)]color_list = []n= len(color_table)#0~1の値でcolor_tableの色を対応させる#等間隔であればfor文が便利for i in range(n): color_list.append((i/(n - 1), color_table[i]))colormap = LinearSegmentedColormap.from_list("any_name", color_list)### for sample ###row = 100col = 300img = np.full((row,col,3),0,dtype=np.uint8)for i in range(col): img[:,i,:] = np.array(colormap(i/(col-1))[:3])*255img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)cv2.imwrite("sample.png",img)
実行結果
参考文献
OpenCVを使った動画生成
import cv2import matplotlib.pyplot as pltimport numpy as npfourcc = cv2.VideoWriter_fourcc(*"h264")video = cv2.VideoWriter("sample.mp4", fourcc, 30.0, (800, 450))fig = plt.figure(figsize=(8, 4.5),dpi=100)plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)t = np.linspace(0, 10*np.pi, 10000)for i in range(301): r = np.sin(i*t/300) plt.plot(r*np.cos(t), r*np.sin(t)) plt.xlim(-1.6/0.9, 1.6/0.9) plt.ylim(-1.0, 1.0) fig.canvas.draw() image_array = np.array(fig.canvas.renderer.buffer_rgba()) img = cv2.cvtColor(image_array, cv2.COLOR_RGBA2BGR) video.write(img) plt.gca().clear()plt.close()video.release()
参考文献 matplotlib : Agg Buffer To Array