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')
这里我用另外一个逻辑矩阵去选元素,也是可以的,这个也很方便