3Darray 修改array值然后保存图片

发布于:2024-04-26 ⋅ 阅读:(26) ⋅ 点赞:(0)
from PIL import Image
import numpy as np 

img_path = './000001.jpg'
# 读取图片
image = Image.open(img_path)
width, height = image.size
print("图片的宽度为={},高度为={}".format(width,height))
print("图片的mode为{}".format(image.mode))
print("图片的format为{}".format(image.format))
pixel = image.load()
img_arr = np.array(image)
print("图片数组大小为{}".format(img_arr.shape))

print("图片像素值最大为{}".format(np.max(img_arr)))
print("图片像素值最大为{}".format(np.min(img_arr)))
#显示图片
image.show()
# 

结果如下
在这里插入图片描述

修改array值并存储

from PIL import Image
import numpy as np

# 我可以把array里面的值给改了,然后重新显示,这样就可以重新显示图片了
for i in range(100):
    for j in range(100):
        img_arr[i,j,0] = 255
        img_arr[i,j,1] = 0 
        img_arr[i,j,2] = 0
    
pil_img = Image.fromarray(img_arr)
print(pil_img.mode)
# RGB
pil_img.save('./lena_save_pillow.jpg')

结果如下
在这里插入图片描述
后面我摸索出了一些很有意思的赋值情形,有时我都忘了还能这么做

from PIL import Image
import numpy as np

img_path = './000001.jpg'
# 读取图片
image = Image.open(img_path)
width, height = image.size
print("图片的宽度为={},高度为={}".format(width,height))
print("图片的mode为{}".format(image.mode))
print("图片的format为{}".format(image.format))
pixel = image.load()
img_arr = np.array(image)
print("图片数组大小为{}".format(img_arr.shape))

print("图片像素值最大为{}".format(np.max(img_arr)))
print("图片像素值最大为{}".format(np.min(img_arr)))
#显示图片
image.show()

# 我可以把array里面的值给改了,然后重新显示,这样就可以重新显示图片了
for i in range(100):
    for j in range(100):
        img_arr[i,j,:] = [255,0,0] ## 注意numpy array是可以一次性赋值的,不需要一个个赋值
    
pil_img = Image.fromarray(img_arr)
print(pil_img.mode)
# RGB
pil_img.save('./lena_save_pillow.jpg')

结果如下
在这里插入图片描述
看这里,不需要弄两个循环,可以直接用一个列表进行赋值,还是很方便的

按照条件进行赋值

from PIL import Image
import numpy as np

img_path = './000001.jpg'
# 读取图片
image = Image.open(img_path)
width, height = image.size
print("图片的宽度为={},高度为={}".format(width,height))
print("图片的mode为{}".format(image.mode))
print("图片的format为{}".format(image.format))
pixel = image.load()
img_arr = np.array(image)
print("图片数组大小为{}".format(img_arr.shape))

print("图片像素值最大为{}".format(np.max(img_arr)))
print("图片像素值最大为{}".format(np.min(img_arr)))
#显示图片
image.show()

# 我可以把array里面的值给改了,然后重新显示,这样就可以重新显示图片了

# 怎么按条件进去呢

aa = np.zeros((512,512))
aa[:100,:200]=1
mask = aa>0

img_arr[mask,:] = [255,0,0] ## 注意numpy array是可以一次性赋值的,不需要一个个赋值
    
pil_img = Image.fromarray(img_arr)
print(pil_img.mode)
# RGB
pil_img.save('./AAAA.jpg')

在这里插入图片描述
这里我用另外一个逻辑矩阵去选元素,也是可以的,这个也很方便