我正在尝试使用CV2或PIL库将我的数组转换为图像。在这两个库中,我得到了混合颜色的图像。
这是我尝试使用CV2将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)
任何想法?
提前致谢。
答案 0 :(得分:4)
大多数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是有损压缩),尝试将它们保存为另一种具有无损压缩的格式。