cv2.imshow和cv2.imwrite从同一来源产生不同的图像

时间:2019-12-11 20:00:51

标签: python numpy opencv imaging

我正在通过样式传输网络创建的NumPy数组创建图像。

output = net.forward()

输出是通过网络处理重新规范化的:

output = output.reshape((3, output.shape[2], output.shape[3]))
output[0] += 103.939
output[1] += 116.779
output[2] += 123.680
output /= 255.0
output = output.transpose(1, 2, 0)

当我用cv2.imshow显示此图像时,会得到正确的图像。现在,我尝试将其转换为图像文件以进行保存和显示。首先,我使用以下方法将图像重新缩放到0-255的整数范围:

output = (output * 255).astype(np.uint8)

然后将其保存为:

cv2.imwrite(path + "/" + "Test_Out" + '.jpg', output) 

后一幅图像具有我无法解释的颜色伪影。 (我没有足够的声誉来显示图像。)

有什么想法如何正确显示NumPy数组?

1 个答案:

答案 0 :(得分:1)

我的猜测是

  1. output*255与值output的浮点数不完全相同
  2. jpg是有损格式,因此某些伪像是正常的。

您可以尝试:

  1. output = np.clip(output*256,0, 255)
  2. .png扩展名/格式保存