tf.read_file和tf.image.decode_jpeg处理图片(转)

最近在做图像处理,发现了一个很有意思的事情,特此记录:

已知"F:\Basketball\0001.jpg"是彩色图像,"F:\Car1\0001.jpg"是灰度图像,但是使用cv2.imread()读进来的shape都是三通道。。。
两幅图片的原图分别如图所示:

Car1\0001

filename = tf.placeholder(tf.string, [], name='filename')
image_file = tf.read_file(filename)
# Decode the image as a JPEG file, this will turn it into a Tensor
image = tf.image.decode_jpeg(image_file)  # 图像解码成矩阵
image = 255.0 * tf.image.convert_image_dtype(image, tf.float32)

with tf.Session() as sess:
img_name1 = “F:\Basketball\0001.jpg”
img_name2 = “F:\Car1\0001.jpg”
image1_ = sess.run(image,feed_dict={filename:img_name1})
image2_ = sess.run(image, feed_dict={filename: img_name2})
print(image1_.shape) #(240,320,3)
print(image2_.shape) #(240,320,1)

a = cv2.imread(“F:\Basketball\0001.jpg”)
b = cv2.imread(“F:\Car1\0001.jpg”)
print(a.shape) #(240,320,3)
print(b.shape) #(240,320,3)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

想要都变成三通道的方法:在tf.image.decode_jpeg函数中加入参数 channels=3
image = tf.image.decode_jpeg(image_file,channels=3)


2018.10.09更新:
今天看mask rcnn源码时,发现了一种操作,判断读入的是灰度图还是RGB图,如果是灰度图,则将其转换成RGB,使用了tf.size()函数来获取image的尺寸,使用tf.cond()函数来进行条件判断,特此记录。
灰度图的尺寸是(h,w,1)
彩色图的尺寸是(h,w,3)

  imsize = tf.size(image) #获取image的尺寸
  image = tf.cond(tf.equal(imsize, ih * iw), #tf.cond()条件表达式,满足条件执行第一个表达式,否则执行第二个lambda表达式
          lambda: tf.image.grayscale_to_rgb(tf.reshape(image, (ih, iw, 1))),  #灰度变成RGB
          lambda: tf.reshape(image, (ih, iw, 3)))
          ```

  
  
  • 1
  • 2
  • 3
  • 4
  • 5

猜你喜欢

转载自blog.csdn.net/monk1992/article/details/89915935
tf