问题描述
我想用实际的 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 的灰度“图像”,我知道该怎么做,但在这种情况下,我想要实际数字。
解决方法
您应该以相同的方式将每一帧标准化为从 0
到 255
的范围。
所以,取每一帧的最小值并得到绝对最小值。然后对最大值执行相同操作并使用这些值进行归一化。
例如,假设最后一帧包含绝对最小值和绝对最大值,这里是如何归一化:
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 的电影生成。