使用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)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
最新评论