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)

想要都变成三通道的方法:在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)))
          ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值