TensorFlow関数tf.image.resize_imagesを使用して画像のサイズを変更しましたが、コードで次のエラーが発生しました:ValueError: 'images'に形状が含まれていません。完全なコードは以下のとおりです。
# -*- coding: utf-8 -*-
import tensorflow as tf
file = ["./1.jpg"]
f = tf.train.string_input_producer(file)
reader = tf.WholeFileReader()
key, img = reader.read(f)
img = tf.image.decode_image(img)
# img.set_shape([218,178,3])
img = tf.image.resize_images(img, [64,64])
coord = tf.train.Coordinator()
with tf.Session() as sess:
tf.train.start_queue_runners(coord=coord)
image = sess.run(img)
完全なエラー情報は
Traceback (most recent call last):
File "image_read_test.py", line 10, in <module>
img = tf.image.resize_images(img, [64,64])
File "C:\Python35\lib\site-packages\tensorflow\python\ops\image_ops_impl.py", line 724, in resize_images
raise ValueError('\'images\' contains no shape.')
ValueError: 'images' contains no shape.
それから私はこれを修正しようとしますが、そのような方法を見つけるだけです
# -*- coding: utf-8 -*-
import tensorflow as tf
file = ["./1.jpg"]
f = tf.train.string_input_producer(file)
reader = tf.WholeFileReader()
key, img = reader.read(f)
img = tf.image.decode_image(img)
# img.set_shape([218,178])
# img = tf.image.resize_images(img, [64,64])
coord = tf.train.Coordinator()
with tf.Session() as sess:
tf.train.start_queue_runners(coord=coord)
image = sess.run(img)
image = tf.image.resize_images(image, [64,64])
この方法でのみ機能がうまく機能しますが、理由はわかりませんか?関数tf.image.resize_imagesは、パラメーターとしてnumpy配列のみを取りますか?または、この問題を解決する別の方法を見つけることができますか?注意:img.set_shape([218,78,3])は私には機能しません
私は最近この問題に直面しました、
tf.image.decode_image()
テンソルを形状で返しませんが、私の画像はすべてjpeg形式でした。
だから私は使用しました
tf.image.decode_jpeg()
形状のテンソルを返し、問題を解決しました。 tf.image.decode_png()もあることに注意してください。
詳細については、こちらをご覧ください Tensorflow tf.image.decode_jpegドキュメント
image_string = tf.read_file(filename)
image_decoded = tf.cond(
tf.image.is_jpeg(image_string),
lambda: tf.image.decode_jpeg(image_string, channels=3),
lambda: tf.image.decode_png(image_string, channels=3))
引数としてexpand_animations = False
を渡すことが重要です。
試してください:
tf.image.decode_image(img, expand_animations = False)
3次元形状のテンソルがあることを確認します。この問題はgif形式が原因です。decode_gifは3D配列[height、width、num_channels]を返すdecode_bmp、decode_jpeg、decode_pngなどの他の形式とは対照的に、4D配列[num_frames、height、width、3]を返すためです。 。
詳細については、 関連ドキュメント を確認してください。