簡體   English   中英

使用CV2或PIL將Numpy數組轉換為圖像

[英]Convert Numpy array to image by using CV2 or PIL

我正在嘗試使用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)

任何的想法?

提前致謝。

大多數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是有損壓縮),嘗試將它們保存為具有無損壓縮的另一種格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM