将图像从cvimg正确转换为张量

时间:2019-03-31 11:25:24

标签: opencv tensorflow

是否存在将cvimg正确转换为张量而不引起任何颜色失真的正确方法?我通过存储2张图像进行了比较。一个使用张量流解码,另一个使用openCV

This is supposed to be the original image
使用tensorflow jpeg编码器生成的图像

  file_reader = tf.read_file(file_name, input_name)
  if file_name.endswith(".png"):
    image_reader = tf.image.decode_png(
        file_reader, channels=3, name="png_reader")
  elif file_name.endswith(".gif"):
    image_reader = tf.squeeze(
        tf.image.decode_gif(file_reader, name="gif_reader"))
  elif file_name.endswith(".bmp"):
    image_reader = tf.image.decode_bmp(file_reader, name="bmp_reader")
  else:
    image_reader = tf.image.decode_jpeg(
        file_reader, channels=3, name="jpeg_reader")

enter image description here
使用简历生成张量转换的图像。

image_reader = tf.convert_to_tensor(cvimg)

在进行简历转换期间,我在这里缺少一些步骤吗?谢谢!

2 个答案:

答案 0 :(得分:2)

OpenCV以BGR格式加载图像,而Tensorflow使用RGB格式(如您所见,图像的蓝色和红色通道已交换)。

因此,如果要读取使用OpenCV加载的图像(我想是cvimg),则只需将色彩通道从BGR交换为RGB:

image_reader = tf.convert_to_tensor(cvimg)
b, g, r = tf.unstack (image_reader, axis=-1)
image_reader = tf.stack([r, g, b], axis=-1)

答案 1 :(得分:0)

另一种方法是:

 image_reader=tf.reverse(cvimg,axis=[-1])

tf.reverse将颠倒您指定尺寸的顺序。由于cvimg(opencv image,[height,width,channel])是BGR格式, 因此tf.reverse(cvimg,axis=[-1])会将BGR(最后一个尺寸)反转为RGB, 您不必使用tf.convert_to_tensor(cvimg),因为tensorfow会自动从numpy数组转换为张量。