nodejs 图片处理模块 rotate_学会Pillow再也不用PS啦——Python图像处理库Pillow入门!...

你在用什么软件进行图像处理呢?厌倦了鼠标和手指的拖拖点点,想不想用程序和代码进行图像的高效处理,Python作为简单高效又很强大的一门编程语言,对于图像的处理自然也是轻松拿下,听起来是不是很酷很极客,那么就跟着我来看看吧!

一、Python的强大图像处理库——Pillow

工欲善其事必先利其器, Python的标准库中虽然没有直接支持图像处理操作的模块,但我们可以通过Python生态圈中的第三方库来完成这些操作。

1 什么是Pillow:

Pillow作为python的第三方图像处理库,提供了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

2 Pillow与PIL的关系:

PIL(Python Image Library)是python的第三方图像处理库,因其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了。但由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

二、安装Pillow

如果安装了Anaconda,Pillow就已经可用了。

否则,需要在命令行下通过pip安装:

pip install pillow

三、基本操作

1 使用 Image 类:

PIL最重要的类是 Image class, 读取和处理图像都要通过这个类来完成。我们可以通过多种方法创建这个类的实例,你可以从文件加载图像,或者处理其他图像, 或者从 scratch 创建。

要从文件加载图像,请使用Image模块中的open函数:

from PIL import Image
# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('cat.jpg')

温馨提示:向左滑动可查看完整代码~)

如果成功,这个函数返回Image对象。您现在可以使用实例属性来检查文件内容:

print(im.format, im.size, im.mode)
JPEG (1920, 1200) RGB

format属为图像来源。如果不是从文件读取就是None。

size属性是包含宽度和高度(像素)的二元组)。

mode属性定义了图像中波段的数量和名称,以及像素类型和深度。常见模式为灰度图像为“L”(亮度),真彩色图像为“RGB”,印刷四色为“CMYK”。

获得了Image类的实例,就可以使用此类定义的方法来处理和操作图像。例如让我们显示刚刚加载的图像:

im.show()

04f870b7aa550913cad66fa306fbc8de.png

接下来让我们看看一些具体的图像处理操作吧~

2 保存指定格式的图像

save(filename,format) :

im.save("cat.jpg",'png')

上面的代码将图像重新保存成png格式

3 剪裁矩形区域 crop(box)

box是一个有四个数字的元组(upper_left_x,upper_left_y,lower_right_x,lower_right_y),分别表示裁剪矩形区域的左上角x,y坐标,右下角的x,y坐标,规定图像的最左上角的坐标为原点(0,0),宽度的方向为x轴,高度的方向为y轴,每一个像素代表一个坐标单位。

crop()返回的仍然是一个Image对象。

im = Image.open("cat.jpg","r")
box = (300,300,800,800)
region = im.crop(box)
region.show()
im.crop()

上面的代码在im图像上裁剪了一个box矩形区域,然后显示出来,效果如图:

4d1a18404ab8776f69d07b045f8567d5.png

109a906749aef7e8e565be76329f8041.png

4 图像粘贴 paste(region,box,mask)

region是要粘贴的Image对象,box是要粘贴的位置,可以是一个两个元素的元组,表示粘贴区域的左上角坐标,也可以是一个四个元素的元组,表示左上角和右下角的坐标。如果是四个元素元组的话,box的size必须要和region的size保持一致,否则将会被convert成和region一样的size。

im.paste(region,(100,100),None)
im.show()

上面的代码将region图像粘贴到左上角为(100,100)的位置,效果如图所示:

a4bf61bca837be1a72e5950c4455bfc6.png

5 生成缩略图 thumbnail(size,resample)

thumbnail可以创建一个指定大小(size)的缩略图,需要注意的是,thumbnail方法是原地操作,返回值是None。第一个参数是指定的缩略图的大小,第二个是采样的,有Image.BICUBIC,PIL.Image.LANCZOS,PIL.Image.BILINEAR,PIL.Image.NEAREST这四种采样方法。默认是Image.BICUBIC。

im.thumbnail((200,200),resample=Image.BICUBIC)
im.show()

上面的代码形成了一个200×200的缩略图,效果如图:

1dc3064ee35a7232e33dd1c335eb567f.png

6 旋转和翻转 transpose(method)

method是transpose的参数,表示选择什么样的翻转或者旋转方式,可以选择的值有:

- Image.FLIP_LEFT_RIGHT,表示将图像左右翻转

- Image.FLIP_TOP_BOTTOM,表示将图像上下翻转

- Image.ROTATE_90,表示将图像逆时针旋转90°

- Image.ROTATE_180,表示将图像逆时针旋转180°

- Image.ROTATE_270,表示将图像逆时针旋转270°

- Image.TRANSPOSE,表示将图像进行转置(相当于顺时针旋转90°)

- Image.TRANSVERSE,表示将图像进行转置,再水平翻转

im_rotate_180 = im.transpose(Image.ROTATE_180)
im_rotate_180.show()

上面的代码将im逆时针旋转180°,然后显示出来,效果如下图:

699b2abc058b8efdc15955747bf74ea9.png

7 颜色通道分离split())

split()方法可以原来图像的各个通道分离,比如对于RGB图像,可以将其R,G,B三个颜色通道分离。

r,g,b = im.split()
r.show()
g.show()
b.show()

上面的代码将小猫图像的RGB颜色通道分离,效果如图:

ab4708a31a550f9de95b4313ad92b5e2.png

6e20f6dc833f4452536d83c92515b9e5.png

1b968ad3f5fb0a6b76b064e4ebe03801.png

8 颜色通道合并merge(mode,channels)

merge方法和split方法是相对的,其将多个单一通道的序列合并起来,组成一个多通道的图像,mode是合并之后图像的模式,比如"RGB",channels是多个单一通道组成的序列。

im_merge = Image.merge("RGB",[b,r,g])
im_merge.show()

上面的代码将小猫图像的颜色通道合并,效果如下图:

c9a3d5d1008634e6dfb734a4d984ab7b.png

9 颜色模式转换

convert(mode,matrix,dither,palette,colors)

convert方法可以改变图像的模式(mode),一般是在'RGB'(真彩图)、'L'(灰度图)、'CMYK'(压缩图)之间转换。

im_L = im.convert ("L")
im_L .show()

上面的代码就是将图像转化为灰度图。效果如下图:

614cae7b2b44b084b102e1e2c291678f.png

10 图像过滤器 filter(filter)

filter方法可以将一些过滤器操作应用于原始图像,比如模糊,边缘增强、浮雕等。filter是过滤器函数,在PIL.ImageFilter函数中定义了大量内置的filter函数,比如BLUR(普通模糊),GaussianBlur(高斯模糊) FIND_EDGES(查找边)等

from PIL import Image, ImageFilter
im = Image.open('cat.jpg')
# 高斯模糊
im_gaussianblur = im.filter(ImageFilter.GaussianBlur)
im_gaussianblur.show()
# 普通模糊
im_blur = im.filter(ImageFilter.BLUR)
im_blur.show()
# 找到边缘
im_find_edge = im.filter(ImageFilter.FIND_EDGES)
im_find_edges.show()
# 浮雕
im_emboss = im.filter(ImageFilter.EMBOSS)
im_emboss.show()
# 轮廓
im_contour = im.filter(ImageFilter.CONTOUR)
im_contour.show()
# 锐化
im_sharpen = im.filter(ImageFilter.SHARPEN)
im_sharpen.show()
# 平滑
im_smooth = im.filter(ImageFilter.SMOOTH)
im_smooth.show()
# 细节
im_detail = im.filter(ImageFilter.DETAIL)
im_detail.show()

下图依次为浮雕与轮廓效果:

c6f1eb7fc676797f05fd95b1c3b9c478.png

8a32be88a41498b7bff6f05ffd7c3de5.png

11 图像增强ImageEnhance()

图像增强也是图像预处理中的一个基本技术,Pillow中的图像增强函数主要在ImageEnhance模块下,通过该模块可以调节图像的白平衡(Color)、亮度(Brightness)、对比度(Contrast)和锐化(Sharpness)等。

from PIL import ImageEnhance
brightness = ImageEnhance.Brightness(im)
im_brightness = brightness.enhance(1.5)
im_brightness.show()

上面的代码将原来图像的亮度增加50%,效果如下图:

b32f41212cdee5f765ef246922ee4163.png

四、练习项目——图片转字符画

看完了上面的操作是不是手痒痒呢,下面我们一起来做一个有趣的练手项目吧~

主要思路

读取彩色图片的RGB值,利用公式转化为灰度值,将图片的灰度值与你自己设定的字符集之间建立映射关系,不同区间的灰度值对应不同的字符。最后将每个像素对应的字符按照原位置打印出来

测试图片与结果:

7531c0412b16b9fa2442272198085626.png

操作代码:

# -*- coding: utf-8 -*-
from PIL import Image
codeLib = '''@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`'. '''#生成字符画所需的字符集
count = len(codeLib)
def transform1(image_file):image_file = image_file.convert("L") #转换为黑白图片,参数"L"表示黑白模式codePic = ''for h in range(0,image_file.size[1]):  #size属性表示图片的分辨率,'0'为横向大小,'1'为纵向for w in range(0,image_file.size[0]):gray = image_file.getpixel((w,h)) #返回指定位置的像素,如果所打开的图像是多层次的图片,那这个方法就返回一个元组codePic = codePic + codeLib[int(((count-1)*gray)/256)]#建立灰度与字符集的映射codePic = codePic+'rn'return codePicdef transform2(image_file):codePic = ''for h in range(0,image_file.size[1]):for w in range(0,image_file.size[0]):g,r,b = image_file.getpixel((w,h))gray = int(r* 0.299+g* 0.587+b* 0.114)codePic = codePic + codeLib[int(((count-1)*gray)/256)]codePic = codePic+'rn'return codePicfp = open(u'gray.jpg','rb')
image_file = Image.open(fp)
image_file=image_file.resize((int(image_file.size[0]*0.75), int(image_file.size[1]*0.5)))#调整图片大小
print(u'Info:',image_file.size[0],' ',image_file.size[1],' ',count)tmp = open('tmp.txt','w')
tmp.write(transform1(image_file))
tmp.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建一个追踪摄像机(2)

为了生成曲线&#xff0c;函数需要通过4个在沿着重量值在0和1之间的路径上连贯的位置。由于重量在这些2个值之间增加&#xff0c;曲线返回在更远的路径上的坐标。 当所提供的重量值为0&#xff0c;曲线将返回正确的坐标在第二个输入坐标。当所提供的重量值为1&#xff0c;曲线将…

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波12 - 空间域滤波基础 - 卷积运算(numpy 实现的三种卷积运算)

这篇文章比较长&#xff0c;请耐心看空间域滤波基础线性滤波可分离滤波器核空间域滤波和频率域滤波的一些重要比较如何构建空间滤波器第一种卷积方法&#xff08;公式法&#xff09;第二种卷积的方法&#xff08;可分离核&#xff09;第三种方法&#xff08;img2col)这是分离核…

hdu_1861_游船出租_201402282130

游船出租 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7238 Accepted Submission(s): 2411 Problem Description 现有公园游船租赁处请你编写一个租船管理系统。当游客租船时&#xff0c;管理员输入船号并按…

acer清理工具 clear下载_SolidWorks绿色版下载-SolidWorks完全清理工具v1.0免费版

SolidWorks完全清理工具(SWCleanUninstall)是一款绿色免费的SolidWorks完全卸载工具。很多SolidWorks安装不成功都是因为之前安装错误做成软件残留。这款工具可以完全清理很多SolidWorks留下的注册表垃圾。软件核心功能1、SWCleanUninstall可以直接删除电脑上的SolidWorks软件2…

ZOJ1221 Risk 图形的遍历

一开始做图形遍历的题都是用链表做的&#xff0c;这次用数组体会到了方便但就是有点浪费。 不过题目给的内存限制已经足够了。 View Code 1 #include<cstdio>2 #include<cstdlib>3 #include<cstring>4 #include<queue>5 #include<iostream>6 7 …

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波13 - 平滑低通滤波器 -盒式滤波器核

这里写目录标题平滑&#xff08;低通&#xff09;空间滤波器盒式滤波器核平滑&#xff08;低通&#xff09;空间滤波器 平滑&#xff08;也称平均&#xff09;空间滤波器用于降低灰度的急剧过渡 在图像重取样之前平滑图像以减少混淆用于减少图像中无关细节平滑因灰度级数量不…

WPF 窗体设置

WPF 当窗体最大化时控件位置的大小调整&#xff1a; View Code 1 <Window x:Class"WpfApplication1.MainWindow"2 xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"3 xmlns:x"http://schemas.microsoft.com/wi…

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波14 - 平滑低通滤波器 -高斯滤波器核的生成方法

目录平滑&#xff08;低通&#xff09;空间滤波器低通高斯滤波器核统计排序&#xff08;非线性&#xff09;滤波器平滑&#xff08;低通&#xff09;空间滤波器 平滑&#xff08;也称平均&#xff09;空间滤波器用于降低灰度的急剧过渡 在图像重取样之前平滑图像以减少混淆用…

python3.7怎么安装turtle_python怎么安装turtle

turtle库是Python语言中一个很流行的绘制图像的函数库&#xff0c;想象一个小乌龟&#xff0c;在一个横轴为x、纵轴为y的坐标系原点&#xff0c;(0,0)位置开始&#xff0c;它根据一组函数指令的控制&#xff0c;在这个平面坐标系中移动&#xff0c;从而在它爬行的路径上绘制了图…

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波15 - 锐化高通滤波器 -拉普拉斯核(二阶导数)

目录锐化&#xff08;高通&#xff09;空间滤波器基础 - 一阶导数和二阶导数的锐化滤波器二阶导数锐化图像--拉普拉斯锐化&#xff08;高通&#xff09;空间滤波器 平滑通过称为低通滤波类似于积分运算锐化通常称为高通滤波微分运算高过&#xff08;负责细节的&#xff09;高频…

在python是什么意思_python 的 表示什么

python代码里经常会需要用到各种各样的运算符&#xff0c;这里我将要和大家介绍的是Python中的&&#xff0c;想知道他是什么意思吗&#xff1f;那就和小编一起来了解一下吧。&是位运算符-与&#xff0c;类似的还有|&#xff08;或&#xff09;&#xff0c;!(非)。 整数…

DevExpress控件GridControl中的布局详解 【转】

DevExpress控件GridControl中的布局详解 【转】 2012-10-24 13:27:28| 分类&#xff1a; devexpress | 标签&#xff1a;devexpress |举报|字号 订阅 http://www.cnblogs.com/martintuan/archive/2011/03/05/1971472.html 进行DevExpress控件GridControl的使用时&#xff…

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波16 - 锐化高通滤波器 - 钝化掩蔽和高提升滤波

目录锐化&#xff08;高通&#xff09;空间滤波器钝化掩蔽和高提升滤波锐化&#xff08;高通&#xff09;空间滤波器 平滑通过称为低通滤波类似于积分运算锐化通常称为高通滤波微分运算高过&#xff08;负责细节的&#xff09;高频&#xff0c;衰减或抑制低频 钝化掩蔽和高提…

python画圆并填充图形颜色_如何使用python设计语言graphics绘制圆形图形

在python设计语言中&#xff0c;可以利用第三方包graphics绘制不同的图形&#xff0c;有圆形、直线、矩形等。如果想要绘制一个圆形&#xff0c;可以设置圆形的半径和坐标位置。下面利用一个实例说明绘制圆形&#xff0c;操作如下&#xff1a;工具/原料 python 截图工具 方法/步…

设计模式学习-工厂方法模式

在上文(设计模式学习-简单工厂模式)的模拟场景中&#xff0c;我们用简单工厂模式实现了VISA和MASTERARD卡的刷卡处理&#xff0c;系统成功上线并运行良好&#xff0c;突然有一天老大跑来说&#xff0c;我们的系统需要升级&#xff0c;提供对一般银联卡的支持。怎么办&#xff1…

word2010激活工具使用方法

1、关闭杀毒&#xff0c;关闭正打开着的word文档 2、执行Activator_v1.2.exe-->Activation Office 2010VL --》按1 --》完毕。 3、打开word--》文件--》帮助--》看右上角。 2、【补充】使用 Office 2010 Toolkit 下载地址&#xff1a; http://vdisk.weibo.com/s/yoz9R 或…

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波17 - 锐化高通滤波器 - 梯度图像(罗伯特,Sobel算子)

目录锐化&#xff08;高通&#xff09;空间滤波器使用一阶导数锐化图像&#xff0d;梯度锐化&#xff08;高通&#xff09;空间滤波器 平滑通过称为低通滤波类似于积分运算锐化通常称为高通滤波微分运算高过&#xff08;负责细节的&#xff09;高频&#xff0c;衰减或抑制低频…

网络传输层之TCP、UDP详解

1、传输层存在的必要性 由于网络层的分组传输是不可靠的&#xff0c;无法了解数据到达终点的时间&#xff0c;无法了解数据未达终点的状态。因此有必要增强网络层提供服务的服务质量。 2、引入传输层的原因 面向连接的传输服务与面向连接的网络服务类似&#xff0c;都分为建立连…

第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波18 - 低通、高通、带阻和带通滤波器、组合使用空间增强方法

低通、高通、带阻和带通滤波器 得到空间滤波器的第三种方法&#xff0c;生成一维滤波器函数&#xff0c;然后要么使用式(3.42)wvvTw vv^TwvvT生成二维可分离的滤波器函数&#xff0c;要么旋转这些一维函数来生成二维核。旋转后的一维函数是圆对称&#xff08;各向同性&#x…