用tensorflow将图片灰度化及遇到的坑

用tensorflow将图片灰度化,很简单的一个问题,几句代码就OK了。但是这里边有很多坑,稍不留神,半天都不一定找得到原因。我下面说说我遇到的坑,希望看到这篇博客的你,别遇到。

先给代码,再介绍我遇到的坑:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from keras_preprocessing.image import load_img,img_to_array
%matplotlib inline


image_name = 'cat1.jpg'
image = load_img(image_name)
#将图片转换为数组
image = img_to_array(image)
#转为黑白
image = tf.image.rgb_to_grayscale(image)
image = tf.squeeze(image,2)
plt.imshow(image)

步骤很简单:

  1. 读取彩色图片
  2. 转换为黑白图片
  3. 显示这个黑白图片

就这简简单单的几步,我却遇到了很多问题,不过在解决问题的过程中又学到了很多,还是很有收获的。 

  • 坑一:

#坑一、不将image转换为数组,直接用rgb_to_grayscale方法,将图片转为灰度图片
image_name = 'cat1.jpg'
image = load_img(image_name)
#转为黑白
image = tf.image.rgb_to_grayscale(image)

执行上边代码会报错如下图,不能直接将一个图片转化为一个tensor。这里需要先将image对象转化为数组array。然后通过百度学会了img_to_array()方法。

图1、坑一错误信息
  • 坑二:

#坑二:最后图片无法显示
image_name = 'cat1.jpg'
image = load_img(image_name)
#将图片转换为数组
image = img_to_array(image)
#转为黑白
image = tf.image.rgb_to_grayscale(image)
plt.imshow(image)

错误信息:

图2、坑二错误

原图是三维的,图片维度为(480,500,3),转为黑白后图片的shape变成了(480,500,1)。猜测,黑白的是不是就两维。于是进行了降维操作 学习了tf.squeeze()方法,具体请看https://ximing.blog.csdn.net/article/details/103261290

 最后降维后,大功告成,结束!

  • 补充:

我当时看了image的类型,本以为是因为转换为array后,里边值的类型为float,所以才不会显示图片。当时就把float类型转为了int型。后来才发现,其实不管array里的值类型是float还是int,都会显示。所以第一版成功运行的代码是把图片类型也转换了,代码如下,第六行多了一句将图片转为int型的代码。

image_name = 'cat1.jpg'
image = load_img(image_name)
plt.imshow(image)
#将图片转换为数组
image = img_to_array(image)
image = image.astype(dtype='uint8')
#转为黑白
image = tf.image.rgb_to_grayscale(image)
#降维
image = tf.squeeze(image,2)
plt.imshow(image)

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello689

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值