Python直接制作一个不断变化的numpy数组的电影

问题描述

我想用实际的 numpy 矩阵数组制作电影。例如,第 0 帧是:

    global_Q_list[0]
array([[0.,0.,0.],[0.,0.]])

虽然第 5000 帧看起来像:

global_Q_list[5000]
array([[8.57716309e-02,8.20853839e-02,1.26145944e-01,2.29583911e-02],[5.06244849e-03,9.06903873e-02,8.43526776e-02,2.47270364e-01],[3.72547418e-01,1.28431849e-02,1.63121207e-02,1.81253747e-02],[0.00000000e+00,7.79033175e-03,1.04229209e-05,1.72459594e-02],[8.57223954e-02,4.79393946e-03,2.87858885e-04,9.80675779e-02],0.00000000e+00,0.00000000e+00],[1.32541201e-01,4.22892486e-01,9.30329542e-03,7.04549482e-03,1.38380103e-01],[1.14731701e-02,2.85900491e-01,9.86552196e-03,1.48614327e-02],[1.35700375e-01,1.48956433e-01,5.89541441e-01,[2.98470415e-01,9.36288568e-01,2.12272268e-01],0.00000000e+00]])

我真的想要一个视频,显示数字随着它们变化而变化,其中列表的每个元素都是一个框架。

如果它是来自 cv2 的灰度“图像”,我知道该怎么做,但在这种情况下,我想要实际数字。

解决方法

您应该以相同的方式将每一帧标准化为从 0255 的范围。

所以,取每一帧的最小值并得到绝对最小值。然后对最大值执行相同操作并使用这些值进行归一化。


例如,假设最后一帧包含绝对最小值和绝对最大值,这里是如何归一化:
min_ = ary.min()
min_ #=> 0.0
max_ = ary.max()
max_ #=> 0.936288568

因为最小值是 0.0,所以归一化很简单:

normalized_frame = (ary * 255 / max_).astype(np.uint8)
normalized_frame
#array([[ 23,22,34,6],#       [  1,24,67],#       [101,3,4,4],#       [  0,2,#       [ 23,1,26],0],#       [ 36,115,37],#       [  3,77,40,160,#       [ 81,255,57],0]],dtype=uint8)

不要忘记转换为 uint8.astype(np.uint8)


如果它是来自 cv2 的灰度“图像”,我知道该怎么做,但在此 如果我想要实际数字。

所以我跳过了使用 opencv 的电影生成。