用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)

 

發佈了82 篇原創文章 · 獲贊 79 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章