当前位置: 首页 > 面试题库 >

Tensorflow图像读取和显示

金高飞
2023-03-14
问题内容

我有一堆图像,格式类似于Cifar10(二进制文件,size = 96*96*3每个图像字节),一个接一个(STL-10数据集)。我打开的文件有138MB。

我试图阅读并检查包含图像的张量的内容,以确保阅读正确,但是我有两个问题-

  1. 是否FixedLengthRecordReader加载整个文件,但是一次只提供一个输入?由于读取第一个size字节应该相对较快。但是,该代码大约需要两分钟才能运行。
  2. 如何获得可显示格式的实际图像内容,或在内部显示它们以验证图像是否被正确阅读?我做了sess.run(uint8image),但是结果是空的。

代码如下:

import tensorflow as tf
def read_stl10(filename_queue):
  class STL10Record(object):
    pass
  result = STL10Record()

  result.height = 96
  result.width = 96
  result.depth = 3
  image_bytes = result.height * result.width * result.depth
  record_bytes = image_bytes

  reader = tf.FixedLengthRecordReader(record_bytes=record_bytes)
  result.key, value = reader.read(filename_queue)
  print value
  record_bytes = tf.decode_raw(value, tf.uint8)

  depth_major = tf.reshape(tf.slice(record_bytes, [0], [image_bytes]),
                       [result.depth, result.height, result.width])
  result.uint8image = tf.transpose(depth_major, [1, 2, 0])
  return result
# probably a hack since I should've provided a string tensor

filename_queue = tf.train.string_input_producer(['./data/train_X'])
image = read_stl10(filename_queue)

print image.uint8image
with tf.Session() as sess:
  result = sess.run(image.uint8image)
  print result, type(result)

输出:

Tensor("ReaderRead:1", shape=TensorShape([]), dtype=string)
Tensor("transpose:0", shape=TensorShape([Dimension(96), Dimension(96), Dimension(3)]), dtype=uint8)
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
[empty line for last print]
Process finished with exit code 137

我正在CPU上运行它,如果添加了任何东西。

编辑:感谢Rosa,我找到了纯TensorFlow解决方案。显然,使用时string_input_producer,为了查看结果,您需要初始化队列运行器。添加到上面的代码中唯一需要做的事情是下面的第二行:

...
with tf.Session() as sess:
    tf.train.start_queue_runners(sess=sess)
...

之后,result可以用显示图像matplotlib.pyplot.imshow(result)。我希望这可以帮助别人。如果您还有其他问题,请随时询问我或查看Rosa答案中的链接。


问题答案:

只是给出一个完整的答案:

filename_queue = tf.train.string_input_producer(['/Users/HANEL/Desktop/tf.png']) #  list of files to read

reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)

my_img = tf.image.decode_png(value) # use png or jpg decoder based on your files.

init_op = tf.global_variables_initializer()
with tf.Session() as sess:
  sess.run(init_op)

  # Start populating the filename queue.

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

  for i in range(1): #length of your filename list
    image = my_img.eval() #here is your image Tensor :)

  print(image.shape)
  Image.fromarray(np.asarray(image)).show()

  coord.request_stop()
  coord.join(threads)

或者,如果您有图像目录,则可以通过此Github源文件将其全部添加

@mttk和@ salvador-dali:我希望这是您需要的



 类似资料:
  • 问题内容: 我正在使用Tensorflow构建标准的图像分类模型。为此,我有输入图像,每个图像都分配了一个标签({0,1}中的数字)。因此,可以使用以下格式将数据存储在列表中: 我想使用TensorFlow的排队系统读取我的数据并将其输入到我的模型中。忽略标签,可以使用和轻松实现。这里的代码: 但是,在该过程中标签丢失了,因为图像数据作为输入管道的一部分被有意地改组了。通过输入队列将标签和图像数据

  • 本文向大家介绍opencv 基本阅读和图像显示,包括了opencv 基本阅读和图像显示的使用技巧和注意事项,需要的朋友参考一下 示例 要控制屏幕上显示窗口的大小,请在命令之前添加以下命令cv2.imshow: 有关更多详细信息,请参见openCV文档

  • 所以我猜没有注册的ImageReader?我怎么能通过Jaspersoft Studio修复这样的东西? 编辑:我尝试使用java.io.InputStream作为这里建议的类类型,但结果是相同的错误。算是吧。一个很大的区别是,在Jaspersoft Studio中,如果出现错误,您可以将图像设置为显示为空白。如果我使用java.awt.Image,那么这个设置什么也不做。我仍然得到一个错误,报告

  • 这里我们使用工具为Python2.7,使用库numpy,opencv,从图片的导入到显示及保存,同时将图片变为灰度图 1、读入图像 cv2.imread(文件名,标记) 第一个参数图像应该在工作目录中,或者应该给出完整的图像路径。 第二个参数是一个标志,指定应读取图像的方式。 cv2.IMREAD_COLOR:加载彩色图像。任何形象的透明度将被忽略。这是默认的标志。 cv2.IMREAD_GRAY

  • 包的类提供读取和写入图像的方法。使用OpenCV,可以读取图像并将其存储在矩阵中(如果需要,可在矩阵上执行转换)。之后可以将处理后的矩阵写入文件。 类的方法用于使用OpenCV读取图像。 以下是此方法的语法。 它接受一个参数(文件名),一个字符串类型的变量,表示要读取的文件的路径。 下面给出了使用OpenCV库读取Java图像的步骤。 第1步:加载OpenCV本机库 使用方法加载OpenCV本机库

  • 我使用tess4j api来读取数字图像。 代码如下: 程序将数字读取为错误。无法找到问题。 输出: 1 1 3 251 问候,瓦苏