首页 飞桨领航团 帖子详情
【AI达人养成营】Python基本图像处理
收藏
快速回复
飞桨领航团 文章AI达人创造营 451 0
【AI达人养成营】Python基本图像处理
收藏
快速回复
飞桨领航团 文章AI达人创造营 451 0
总所周知Python是一门很牛的语言,它不仅在数据处理中表现出色,用于图片处理也是非常好用的。 用Python做图像处理有很多种方法,应该都听说过PIL,但是由于其年代久远,所以产生了Pillow这个大宝贝。
  • 安装Pillow
想要使用Pillow呢,就要先安装了,使用pip可以很好的安装Pillow。
pip install pillow​
  • 基本的图像处操作

1.要想处理图片首先呢就是载入图片

from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

#获取图片
Image.open("f:/picture/t.jpg")
  
#显示图片
def showimg(img, isgray=False):
  plt.axis("off")
  if isgray == True:
    plt.imshow(img, cmap='gray')
  else: 
    plt.imshow(img)
  plt.show()

2.获取图像信息

print(im.format, im.size, im.mode)

3.更改图片格式

from PIL import Image

Image.open(infile).save(outfile, 'JEPG')

4.图像颜色处理

众所周知,图片其实是由一个个像素组成的,而像素是由数字代表的,所以其可以看成为一二维矩阵,如果是灰度图,每个点就有一个 0 到 255 到数值表示点的灰度。如果是彩色的图像,每个点就有三个 0 到 255 到数值,分别表示 R(红色),G(绿色),B(蓝色)的值,有的格式还会有第四个值用来表示透明度。既然可以把图像转化成一个矩阵,那么图像的处理就是对这个矩阵的变换。例如,创建缩略图就是在图像的横纵坐标上采样,每隔几行或几列取出一个点组成一个新点图像。而图像的滤镜就是通过一个函数或规则,将图像的点的数值进行一些运算而得到的另一个矩阵。

灰度处理

灰度处理方法很多此处只列举一种方法

im = Image.open("f:/pic/t.jpg")
im_gray = im.convert('L')
showimg(im_gray, True)          #该函数见上文

好玩的示例图像风格转换:

from PIL import Image
import numpy as np

# 原始图片路径
f = input('请输入文件路径')
fgai = input('请输入保存路径')
original_image_path = f
# 要生成的手绘图片路径,可自定义
handdrawn_image_path = fgai

# 加载原图,将图像转化为数组数据
a=np.asarray(Image.open(original_image_path).convert('L')).astype('float')
depth=10.

#取图像灰度的梯度值
grad=np.gradient(a)

#取横纵图像梯度值
grad_x,grad_y=grad
grad_x=grad_x*depth/100.
grad_y=grad_y*depth/100.
A=np.sqrt(grad_x**2+grad_y**2+1.)
uni_x=grad_x/A
uni_y=grad_y/A
uni_z=1./A

#光源的俯视角度转化为弧度值
vec_el=np.pi/2.2

#光源的方位角度转化为弧度值
vec_az=np.pi/4.

#光源对x轴的影响
dx=np.cos(vec_el)*np.cos(vec_az)
dy=np.cos(vec_el)*np.sin(vec_az)
dz=np.sin(vec_el)

#光源归一化,把梯度转化为灰度
b=255*(dx*uni_x+dy*uni_y+dz*uni_z)

#避免数据越界,将生成的灰度值裁剪至0-255内
b=b.clip(0,255)

#图像重构
im=Image.fromarray(b.astype('uint8'))

print('完成')
im.save(handdrawn_image_path)

 

 

0
收藏
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户