我正在尝试使用 OpenCV 或 PIL 库将我的数组转换为图像,在这两个库中,我都得到了颜色混合的图像。
这是我尝试使用 OpenCV 将 Numpy 数组转换为图像的方式:
for i in range(len(batch_tx)):
cls_pred = sess.run(y_pred_cls, feed_dict={x: batch_tx})
cls_true = sess.run(tf.argmax(batch_ty, 1))
img = cv2.resize(batch_tx[i], (FLAGS.img_size, FLAGS.img_size))
img = cv2.cvtColor(img.astype(np.uint8), cv2.COLOR_BGR2RGB)
cv2.imwrite(
'./saveImage/img' + str(i) + ': ' + 'True: ' + str(cls_true[i]) + ', Pred:' +
str(cls_pred[i]) + '.JPEG', img)
我所有图像的输出如下图(这是一张船的图像)
我也尝试了 PIL 库并获得了相同的输出。
batch_tx[1]
是我数据集中第一张图片的数组,类型是 numpy.ndarray,形状为 (96,96,3)
有什么想法吗?
提前致谢。
最佳答案
大多数 OpenCV 函数仅适用于 BGR 图像,不适用于 RGB,例如 imshow 或 imwrite。 OpenCV 将为您完成工作,以正确的方式放置它并将其保存为 JPG 图像,可以由任何其他应用程序加载。如果您将它与另一个订单一起使用,那么该函数将不知道这一点并以错误的顺序保存它。
删除这一行:
img = cv2.cvtColor(img.astype(np.uint8), cv2.COLOR_BGR2RGB)
应该为您完成工作。
我的猜测是它的格式也不正确 (np.uint8),因为您在我刚刚告诉您要删除的行中使用了它。因此,您还必须将保存部分更改为:
cv2.imwrite(
'./saveImage/img' + str(i) + ': ' + 'True: ' + str(cls_true[i]) + ', Pred:' +
str(cls_pred[i]) + '.JPEG', img.astype(np.uint8))
现在一切正常。此图像也可以使用 PIL 和任何其他库在另一时刻加载,您将获得几乎相同的图像(JPG 是有损压缩)如果您想要相同,请尝试将它们保存为具有无损压缩的另一种格式。
关于python-3.x - 使用 OpenCV 或 PIL 将 Numpy 数组转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50679202/