基本图像操作
输入一张图片后,对其进行截取,之后其对图片的叠加,再之后进行图片的反 转,再进行颜色处理(可以是简单的颜色处理),最后保存得到的图片。
对图片进行截取
def Cut (path):
img=plt.imread(path)
print (img.shape)
img=img[300:900,:1000,:] #截取图片x轴300到900,y轴0到1000,不对z轴截取
plt.axis('off')
plt.imshow(img)
plt.show()
原图
截取后:
图片叠加。因为两张图片的通道数不一样,要转换到一样后再叠加。同样也要注意使图片的尺寸一致。
def Superposition(path,path2):
img1=Image.open(path)
img1.resize((1920,1080))
img2=Image.open(path2)
img2.resize((1920,1080))
img2 = img2.convert('RGBA')#两张图片通道数不一样
img3=Image.blend(img1,img2,0.5)
plt.axis('off')
plt.imshow(img3)
plt.show()
效果:
对图片进行旋转
def Revolve(path):
img=Image.open(path)
img2=img.rotate(45)#旋转的角度
plt.axis('off')
plt.imshow(img2)
plt.show()
效果:
在对图片进行颜色处理时,不知道是哪里的原因,图片出来都是一片蓝色
def do_normalise(im):
return -np.log(1/((1 + im)/257) - 1)
def undo_normalise(im):
return (1/(np.exp(-im) + 1) * 257 - 1).astype("uint8")
def rotation_matrix(theta):
return np.c_[
[1,0,0],
[0,np.cos(theta),-np.sin(theta)],
[0,np.sin(theta),np.cos(theta)]
]
def plti(im, **kwargs):
plt.imshow(im, **kwargs)
plt.axis('off') # 去掉坐标轴
plt.show() # 弹窗显示图像
im=plt.imread(path3)
im_normed = do_normalise(im)
im_rotated = np.einsum("ijk,lk->ijl", im_normed, rotation_matrix(np.pi)) # 利用爱因斯坦求和约定做矩阵乘法,实际上是将每个RGB像素点表示的三维空间点绕X轴(即红色通道轴) 旋转180°。
im2 = undo_normalise(im_rotated)
plti(im2)