使用tensorflow将图片灰度化以及遇到的坑解决
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)
步骤很简单:
- 读取彩色图片
- 转换为黑白图片
- 显示这个黑白图片
就这简简单单的几步,我却遇到了很多问题,不过在解决问题的过程中又学到了很多,还是很有收获的。
坑一
#坑一、不将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()方法, 最后降维后,大功告成,结束!
补充
我当时看了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)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Python中的np.vstack()和np.hstack()详解
这篇文章主要介绍了np.vstack()和np.hstack(),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04
python3实现ftp服务功能(服务端 For Linux)
这篇文章主要介绍了python3实现ftp服务功能,服务端 For Linux,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-03-03
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
这篇文章主要介绍了python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例,需要的朋友可以参考下2020-02-02
python-parser.parse_args()解析参数问题
这篇文章主要介绍了python-parser.parse_args()解析参数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-08-08


最新评论