Python学习part5:基本图像操作

Python学习part5:基本图像操作

让我们介绍一下python的图像处理
首先简单的图像处理,主要包括的库有OpenCV、PIL(Python Imaging
Library)、skimage、 matplotlib
进阶的图像操作则需要用到numpy、pandas。(这两个库在本质上都是进
行科学计算的库)
下面放出基本图像操作的代码与操作


from PIL import Image#引入PIL

import numpy as np#引入numpy
#matplotlib.pylab和PIL引入图片为RGB
import matplotlib.pylab as plt
#cv2引入图片为BGR
import cv2

img=Image.open('C:/Users/admin/Desktop/图片/nb1.jpg')
img1=plt.imread('C:/Users/admin/Desktop/图片/nb1.jpg')
print(img1.shape)#shape只能在matplotlib.pylab使用
print(img.size)#输出尺寸
print(img.mode)#输出mode

plt.imshow(img)#imshow和show需同时存在,否则图像无法呈现
plt.show()
plt.axis('off')#加完plt.axis('off')去掉坐标轴
plt.imshow(img)
plt.show()

img.save('2.jpg')#对图像修改过后保存图片

r,g,b=img.split()#分离三通道R,G,B
r.show()
g.show() 
b.show()
'''
r.save('C:/Users/admin/Desktop/图片/R.jpg')
g.save('C:/Users/admin/Desktop/图片/G.jpg')
b.save('C:/Users/admin/Desktop/图片/B.jpg')
'''
#叠加图片
img2 = Image.open('C:/Users/admin/Desktop/图片/nb1.jpg')
img3 = Image.open('C:/Users/admin/Desktop/图片/nb2.jpg')
a=img2.resize((400,400))#叠加图片前提需要相同格式大小的图片
b=img3.resize((400,400))#通过resize
c=Image.blend(a,b,0.5)#0.5指两幅图的参数比例
c.save('C:/Users/admin/Desktop/图片/shuai.jpg')
c.show()
d=c.rotate(45)#rotate指逆时针旋转45度
d.show()

#图片裁剪(只能在matplotlib.pylab使用)
img1=plt.imread('C:/Users/admin/Desktop/图片/nb1.jpg')
h=img1[200:2800,:2000,:]#截x轴200到2800,y轴到2000,z轴不做处理(z轴指图像深度)
plt.imshow(h)
plt.show()

#颜色转换(利用爱因斯坦约定方程对图像进行操作,转载)
im=plt.imread('C:/Users/admin/Desktop/图片/shuai.jpg')
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)]
 ]
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)                                          
plt.axis('off')
plt.imshow(im2)
plt.show()

为了让读者更清楚的了解过程,我进行简单的图片介绍
图片1
在这里插入图片描述
进行RGB通道分离的图片

import numpy as np
from PIL import Image
img=np.array(Image.open('C:/Users/admin/Desktop/photo/nb1.jpg'))#将图片转化为数组
img*=np.array([1,0,0]).astype(np.uint8)#将通道分离出来,其余两通道为0,参数课以改变颜色深浅
a=Image.fromarray(img)#将数组转化为图片
a.show()
#fromarray和array所在的函数库不一样,一个是Image,一个是np

效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是两张照片叠加的图片效果
在这里插入图片描述
颜色变换后的效果
在这里插入图片描述
注:彩色图一般是三通道(不算背景板)
黑白图是单通道(例:灰度值)

Ending!

发布了10 篇原创文章 · 获赞 19 · 访问量 1307

猜你喜欢

转载自blog.csdn.net/qq_45603919/article/details/103094398