数字图像处理入门(易混知识点)【1】

一、明确在图像处理中对应的x轴和y轴与我们常用的有所不同

二、在需要更换图片中的某个某行或者某个形状的像素值时,通常需要使用两层for循环,来进行遍历,此时我们就需要知道对应的横向最大和纵向最大,即这张图片的宽和高,具体获得代码如下:

# 1. 用pillow载入cat.png
from PIL import Image
img = Image.open("cat.png")  # 打开名为"cat.png"的图像文件
pixels = img.load()  # 获取图像的像素数据
w, h = img.size  # 获得图像的宽和高

三、接下来我们以具体的一个案列来讲解,导入一张图片将整张图片更改为红色通道图。

# 1. 用pillow载入xxx.png
from PIL import Image
img = Image.open("xxx.png")  # 打开名为"xxx.png"的图像文件
pixels = img.load()  # 获取图像的像素数据
w, h = img.size  # 获得图像的宽和高

# 2. 循环每一个像素, 只保留其红色通道的值
for x in range(w):
    for y in range(h):
        r, _, _ = pixels[x, y] 
        pixels[x, y] = r, 0, 0 

# 3. 保存并显示图像
img.save("xxx_blue.png", "PNG")  
img.show() 
A、但是注意,并不是所有的图片都是只有三个通道的,还可能具有第四个通道——透明度。
所以当一张图片含有透明度第四个分量的时候,将代码修改如下:
from PIL import Image  
  
# 1. 用Pillow载入图像  
img_path = r"F:\\图像处理\\实验示例图片\\星云.png"  
img = Image.open(img_path)  
pixels = img.load()  
w, h = img.size  

# 打印一个像素的值来查看它有多少个分量  
print(pixels[0, 0])  # 打印图像左上角的像素值  这个不仅有三个分量,还有一个透明度分量
  
# 2. 循环每一个像素, 只保留其红色通道的值  
for x in range(0,int(w/2)):  
    for y in range(int(h/2),h):  
        # 根据实际的像素值分量数量来解包  
        r, *rest = pixels[x, y]  # 使用扩展的序列解包来获取红色通道和其他通道  
        pixels[x, y] = (r, 0, 0)  # 只保留r值  
  
# 3. 保存并显示图像  
output_path = r"F:\\图像处理\\实验示例图片\\星云_red.png"  
img.save(output_path, "PNG")  
img.show()
B、将上诉代码所使用的图片放在下面了

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhou Xuan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值