2017-04-13 38 views
0

我是tensorflow的新手。我正在從文件中讀取圖像,並使用tf.image.decode_jpeg對其進行解碼,然後使用matplotlib繪製解碼圖像。但不知何故原始和解碼圖像是不同的。Tensorflow沒有正確解碼圖像

This is original Image

This is decoded image plotted with matplotlib

filenames = ['/Users/darshak/TensorFlow/100.jpg', '/Users/darshak/TensorFlow/10.jpg'] 
filename_queue = tf.train.string_input_producer(filenames) 

reader = tf.WholeFileReader() 
filename, content = reader.read(filename_queue) 

image = tf.image.decode_jpeg(content, channels=3) 

image = tf.cast(image, tf.float32) 

resized_image = tf.image.resize_images(image, [256, 256]) 

image_batch = tf.train.batch([resized_image], batch_size=9) 

sess = tf.InteractiveSession() 

coord = tf.train.Coordinator() 
threads = tf.train.start_queue_runners(sess=sess, coord=coord) 

plt.imshow(image.eval()) 
plt.show() 
sess.close() 
+0

你能告訴我們你使用繪製代碼圖片? – Suever

+1

沒有代碼,我最好的猜測是你使用OpenCV來加載圖像,它們將它們加載爲BGR並將它們加載matplotlib,將它們繪製爲RGB,從而產生問題。 –

回答

1

的問題的產生是因爲plt.imshow(image.eval())取決於image元素類型解釋該圖像數據不同。

  • 如果imagetf.uint8張量(即,因爲它是由tf.image.decode_jpeg()生產)將包含從0255用於R,G和B通道,以及plt.imshow()解釋(0, 0, 0)爲黑色和(255, 255, 255)爲白色。

  • 當你施放image是一個tf.float32張量,它將包含數值從0.0255.0用於R,G和B通道,以及plt.imshow()解釋(0.0, 0.0, 0.0)爲黑色,但它解釋(1.0, 1.0, 1.0)爲白色。所有大於1.0的值均與1.0相同,結果圖像顯示變色。

如果打算來表示圖像的tf.float32張量和可視化它,你應該255.0劃分圖像值:

image = tf.image.decode_jpeg(content, channels=3) 
image = tf.cast(image, tf.float32)/255.0 
+0

非常感謝。 –

+0

'tf.image.decode_jpeg'使用哪種算法,即dct方法來生成圖像。根據文檔,dct方法'默認爲「。字符串,用於指定用於解壓縮的算法提示。默認爲「」,映射到系統特定的默認值。當前有效值爲[「INTEGER_FAST」,「INTEGER_ACCURATE」]。我如何知道我的系統是使用INTEGER_ACCURATE還是INTEGER_FAST? – dpk