python numpy中astype使用不当导致图像出现artifact

Posted sunny,lee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python numpy中astype使用不当导致图像出现artifact相关的知识,希望对你有一定的参考价值。

在网络训练中,发现生成的图像不对劲,如下面左图所示,文字完全不对。后来发现,是因为在python中把float类型的变量直接转成uint8的时候,负数部分就变成了极大的整数,变成了图中的白点。应该是采用截断的方法,把小于0大于255的都截断,然后再转换成uint8。得到的结果如右图所示。

 一段验证性的代码,如果把a转成uint8,我们会发现-5就变成了(256-5)=251,而300就变成了(300-256)=44。所谓白色的地方出现了黑点,而黑字上也有了白点。

import numpy as np

a = [-5, -10, 240, 300]

a = np.reshape(a,[4,1])

b = a.astype(np.uint8)

  

print(a)
[[ -5]
 [-10]
 [240]
 [300]]

print(b)
[[251]
 [246]
 [240]
 [ 44]]

  

 

以上是关于python numpy中astype使用不当导致图像出现artifact的主要内容,如果未能解决你的问题,请参考以下文章

Python的Numpy库的函数astype()在将大范围数据类型转换为小范围数据类型时并不是做饱和(saturate)操作(附实现饱和操作的方法)

『Numpy』numpy.dtype内存数据解析方式指导

为啥numpy数组的astype方法在转换类型时不修改输入?

使用NumPy库的函数astype()对ndarray的数据类型进行转换

『Numpy』内存分析_numpy.dtype内存数据解析方式指导

numpy随笔-astype