使用tensorflow將圖片灰度化以及遇到的坑解決
tensorflow將圖片灰度化及遇到的坑
用tensorflow將圖片灰度化,很簡單的一個(gè)問題,幾句代碼就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) #將圖片轉(zhuǎn)換為數(shù)組 image = img_to_array(image) #轉(zhuǎn)為黑白 image = tf.image.rgb_to_grayscale(image) image = tf.squeeze(image,2) plt.imshow(image)
步驟很簡單:
- 讀取彩色圖片
- 轉(zhuǎn)換為黑白圖片
- 顯示這個(gè)黑白圖片
就這簡簡單單的幾步,我卻遇到了很多問題,不過在解決問題的過程中又學(xué)到了很多,還是很有收獲的。
坑一
#坑一、不將image轉(zhuǎn)換為數(shù)組,直接用rgb_to_grayscale方法,將圖片轉(zhuǎn)為灰度圖片 image_name = 'cat1.jpg' image = load_img(image_name) #轉(zhuǎn)為黑白 image = tf.image.rgb_to_grayscale(image)
執(zhí)行上邊代碼會(huì)報(bào)錯(cuò)如下圖,不能直接將一個(gè)圖片轉(zhuǎn)化為一個(gè)tensor。
這里需要先將image對(duì)象轉(zhuǎn)化為數(shù)組array。
然后通過百度學(xué)會(huì)了img_to_array()方法。

圖1、坑一錯(cuò)誤信息
坑二
#坑二:最后圖片無法顯示 image_name = 'cat1.jpg' image = load_img(image_name) #將圖片轉(zhuǎn)換為數(shù)組 image = img_to_array(image) #轉(zhuǎn)為黑白 image = tf.image.rgb_to_grayscale(image) plt.imshow(image)
錯(cuò)誤信息:

圖2、坑二錯(cuò)誤
原圖是三維的,圖片維度為(480,500,3),轉(zhuǎn)為黑白后圖片的shape變成了(480,500,1)。
猜測,黑白的是不是就兩維。于是進(jìn)行了降維操作 學(xué)習(xí)了tf.squeeze()方法, 最后降維后,大功告成,結(jié)束!
補(bǔ)充
我當(dāng)時(shí)看了image的類型,本以為是因?yàn)檗D(zhuǎn)換為array后,里邊值的類型為float,所以才不會(huì)顯示圖片。
當(dāng)時(shí)就把float類型轉(zhuǎn)為了int型。后來才發(fā)現(xiàn),其實(shí)不管array里的值類型是float還是int,都會(huì)顯示。
所以第一版成功運(yùn)行的代碼是把圖片類型也轉(zhuǎn)換了,代碼如下,第六行多了一句將圖片轉(zhuǎn)為int型的代碼。
image_name = 'cat1.jpg' image = load_img(image_name) plt.imshow(image) #將圖片轉(zhuǎn)換為數(shù)組 image = img_to_array(image) image = image.astype(dtype='uint8') #轉(zhuǎn)為黑白 image = tf.image.rgb_to_grayscale(image) #降維 image = tf.squeeze(image,2) plt.imshow(image)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
寶塔(BT面板)部署Python項(xiàng)目圖形化完整步驟
這篇文章主要介紹了寶塔(BT面板)部署Python項(xiàng)目的完整步驟,包括安裝寶塔面板、創(chuàng)建Python運(yùn)行環(huán)境、上傳項(xiàng)目代碼、安裝依賴、配置反向代理、設(shè)置靜態(tài)文件和跨域等步驟,需要的朋友可以參考下2025-12-12
用實(shí)例說明python的*args和**kwargs用法
python的*args和**kwargs如何用,看了下面的例子你就清楚了。2013-11-11
Python利用模糊哈希實(shí)現(xiàn)對(duì)比文件相似度
對(duì)比兩個(gè)文件相似度,python中可通過difflib.SequenceMatcher/ssdeep/python_mmdt/tlsh實(shí)現(xiàn),<BR>在大量需要對(duì)比,且文件較大時(shí),需要更高的效率,可以考慮模糊哈希,本文就來和大家詳細(xì)聊聊2023-01-01
python使用scapy掃描內(nèi)網(wǎng)IP或端口的方法實(shí)現(xiàn)
Scapy是一個(gè)Python程序,使用戶能夠發(fā)送,嗅探和剖析并偽造網(wǎng)絡(luò)數(shù)據(jù)包,本文主要介紹了python使用scapy掃描內(nèi)網(wǎng)IP或端口的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10
零基礎(chǔ)使用Python讀寫處理Excel表格的方法
這篇文章主要介紹了Python讀寫處理Excel表格,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

