猿问

在python中将图像转为灰度

我是张量流和 keras 的新手,我正在尝试为街景门牌号码 (SVHN) 数据集创建 CNN 模型。数据集包含彩色图像,我想将它们转换为灰度图像。我在网上发现了一些代码,声称他们正在将图像转换为灰度,但它只是改变颜色。


人们正在阅读带有灰色色彩图的第二张图像。有什么办法可以真正将这张图像变成灰度图吗?(我不知道如何用这种编程语言处理图像。如果这是一个愚蠢的问题,请原谅我并提供一个简短的解释。)我在下面提供了图像和代码,我将不胜感激。


代码:


import matplotlib

import matplotlib.pyplot as plt

import numpy as np


#Read picture:

picture = plt.imread('google.jpg')


print("google logo's shape is: ",picture.shape) #(500, 500, 3)


#saving picture as an np array:

pic_array = np.array(picture)


#Turning image to grayscale

grayscale_pic = np.expand_dims(np.dot(pic_array[...,:3],[0.299, 0.587, 0.144]),axis = 0)


#Dimensions shifted, (probly my mistake):

grayscale_pic = np.moveaxis(grayscale_pic, 0, -1)


print("shape of grayscale pic = ", grayscale_pic.shape) # (500, 500, 1)


plt.imshow(picture)         #Figure_1

plt.show()

plt.imshow(grayscale_pic)   #Figure_2

plt.show()

蝴蝶不菲
浏览 114回答 3
3回答

海绵宝宝撒

有多种方法可以做到这一点。一种可能的方法是利用PIL(Pillow)库:from PIL import Imageimport matplotlib.pyplot as pltpicture = Image.open('google.jpg')grayscale_pic = picture.convert('LA')grayscale_pic.save('grayscale.png')fig,ax = plt.subplots(nrows=1, ncols=2)plt.subplot(1,2,1)plt.imshow(picture)plt.subplot(1,2,2)plt.imshow(grayscale_pic)plt.show()输出:

慕田峪7331174

opencv您可以使用以下命令将普通图像转换为灰度图像:import cv2 gray = cv2.cvtColor(picture,cv2.COLOR_RGB2GRAY)如果你numpy更喜欢opencv,那么你可以使用这个:gray = np.dot(picture[...,:3], [0.2989, 0.5870, 0.1140])

慕桂英3389331

您可以与权重一起使用matplotlib:import numpy as npimport matplotlib.pyplot as pltan_image = plt.imread('google.png')rgb_weights = [0.2989, 0.5870, 0.1140]grayscale_image = np.dot(an_image[..., :3], rgb_weights)plt.axis('off')plt.imshow(grayscale_image, cmap=plt.get_cmap("gray"), aspect='auto')plt.show()输出:如果删除aspect='auto'参数:或者你可以使用opencvimport cv2an_image = cv2.imread("google.png")grey_image = cv2.cvtColor(an_image, cv2.COLOR_BGR2GRAY)或者你可以使用PIL图书馆from PIL import Imageimg = Image.open('google.png').convert('LA')LA模式为 L(8 位像素,黑白),带有 ALPHA 设计用于 .gif 和 .png。如果您的图像是 .jpeg,请使用L.输出:
随时随地看视频慕课网APP

相关分类

Python
我要回答