Python图像灰度化处理

该博客主要介绍了如何使用Python进行图像的灰度变换。首先,通过定义`showimg`函数展示图像,然后利用imageio读取 Lena 图像并进行灰度转换。接着,展示了四种不同的灰度变换函数,并在图像上应用这些变换。最后,通过matplotlib库展示原始图像、灰度图像以及应用不同灰度变换后的图像效果。此外,还提供了两种不同的灰度化方法,包括直接将RGB通道转换为灰度和使用加权平均方法。
摘要由CSDN通过智能技术生成
import imageio
import numpy as np
from PIL import Image #用于基本的图像处理
import matplotlib.pyplot as plt # plt 用于显示图片

#定义一个显示函数showing
def showimg(img, isgray=False):
    plt.axis("off")
    if isgray == True:
        plt.imshow(img, cmap='gray')
    else:
        plt.imshow(img)


lena = imageio.imread("lena.jpg")# 用于读取图片

#彩色图像的灰度转换(只抽取G,绿色面)
gray_lena = lena
gray_lena = np.array(gray_lena, dtype=np.int32)
gray_lena[...,0] = 0
gray_lena[...,2] = 0
gray_lena = np.sum(gray_lena, axis=2)

#灰度变换函数图像
plt.rcParams['font.sans-serif'] = ['SimHei'] #用于显示汉字
plt.title('灰度变换函数图像')
plt.xlabel('像素值')
plt.ylabel('变换后像素值')

x1 = np.arange(0, 256)
y1 = np.arange(0, 256)

f1, = plt.plot(x1, y1, '--')

y2 = 255 - x1
f2, = plt.plot(x1, y2, 'y')

y3 = (100.0/255)*x1 + 100
f3, = plt.plot(x1, y3, 'r:')

y4 = 255.0*(x1/255.0)**2
f4, = plt.plot(x1, y4, 'm--')
plt.legend((f1, f2, f3, f4), ('y=x','y=255-x','y=(100.0/255)*x+100','y=255.0*(x/255.0)**2'),loc='upper center')
plt.show()

#图像的灰度变换
g1 = 255 - gray_lena

g2 = (100.0/255)*gray_lena +100

#显示效果图
plt.subplot(221)
showimg(lena,True)
#plt.imshow(lena)
plt.title("Source Image")

plt.subplot(222)
showimg(gray_lena,True)
#plt.imshow(gray_lena,cmap='gray')
plt.title("Gray Image")

plt.subplot(223)
showimg(g1,True)
plt.title("g1 Image")

plt.subplot(224)
showimg(g2,True)
plt.title("g2 Image")

plt.show()
#灰度化的一些方法
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np


# 获取图片
def getimg():
    return Image.open("D:\Pycharm\example\lena.jpg")


# 显示图片
def showimg(img, isgray=False):
    plt.axis("off")
    if isgray == True:
        plt.imshow(img, cmap='gray')
    else:
        plt.imshow(img)
    plt.show()

showimg(getimg())   #原图显示

im = getimg()
im_gray = im.convert('L')
showimg(im_gray,True)

im = getimg()
im = np.array(im)
im[:,:,0] = im[:,:,0]*0.3
im[:,:,1] = im[:,:,1]*0.59
im[:,:,2] = im[:,:,2]*0.11
im = np.sum(im, axis=2)
showimg(Image.fromarray(im), True)

im4 = getimg()
im4 = np.array(im4, dtype=np.int32)
im4[...,1] = 0
im4[...,2] = 0
im4 = np.sum(im4, axis=2)
showimg(Image.fromarray(im4), True)

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值