python rgb cmyk 互转 python中rgb

您所在的位置:网站首页 cmyk转成jpg后打印是原色彩吗 python rgb cmyk 互转 python中rgb

python rgb cmyk 互转 python中rgb

2023-06-18 13:21| 来源: 网络整理| 查看: 265

python第三方库——pillow库

PIL:Python Imaging Library,已经是Python平台上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用,因此广受开发人员的使用。它提供了广泛的文件格式支持、强大的图像处理能力、主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

pip install pillow1、图像处理的基本知识1.1图像的RGB色彩模式

RGB三个色彩通道的变化和叠加得到各种颜色,其中

R红色,取值范围:0~255G绿色,取值范围:0~255B蓝色,取值范围:0~255

比如,我们常见的黄色就是由红色和绿色叠加而来:

红色的RGB表示(255,0,0)绿色的RGB表示(0,255,0)

蓝色的RGB表示(0,0,255)黄色的RGB表示(255,255,0)

1.2 像素阵列

像素(pixel,简写px):是数码感光元件上最小的感光单位,也是数字图片上最小的不可再分割的元素。例如,我们通常说的照片长1920、宽1080,是指横向1920个像素,纵向1080个像素(总计2073600个像素)。而每一个像素包含RGB三种颜色,也就是说1个像素包含3个字节的信息:(R,G,B) 。假如这个像素是红色,则信息是:(255,0,0)。那么,理论上我们只要操作每个点的这三个数字,就能够实现任何推行。一幅画上所有的像素点的信息就完全可以采用矩阵表示。通过矩阵的运算实现更加复杂的操作。

2、pillow使用2.1 导入pillow库

Pillow库安装成功后,导包时要用PIL来导入,而不能用pillow或Pillow,导入相应的包:

import PIL from PIL import image # 导入PIL第三方库中的image模块

在Pillow库中,有二十多个模块,还支持非常多的插件。其中最常用的是Image模块中同名的Image类,其他很多模块都是在Image模块的基础上对图像做进一步的特殊处理。

2.2 使用pillow库中的Image模块

Image类

打开照片 Image.open(fp,mode='r'),如果加载传给则会返回一个Image对象,fp是照片路径,mode是模式。图像的对象属性由:filename源文件的文件名或路径,format图片的格式,size图片大小,以像素为单位,mode照片模式,width图像宽度,height图片高度,palete调色板表等。新建图像 new(mode,sizemcolor=0):在Image模块中,可以使用new()新建图像。mode值图片模式。size表示图片尺寸,是使用宽和高两个元素构成元组。color默认颜色。保存照片 save(fp,format=None,* *params):保存图像到给定的文件名下,如果没有指定格式则可以使用文件扩展名来确定要使用的格式,无返回值。fp是文件名或路径,format可选的格式覆盖。显示照片 show():显示这个图像,这方法主要是调试目的。1、基本操作

对原本的照片进行一些基本操作,获取该照片的信息,例如:照片格式,照片大小,打印照片等等基本操作。

from PIl import Image # 导入PIL库中的image模块 img=Image.open('2045435.jpg') # 打开照片 img.show() # 显示照片 print('照片的格式:',img.format) # 输出:jpg 照片的格式是jpg print(img.size) # 输出:(1920,1080),以元组的形式进行展现,输出照片的长和宽,可以在后面增加[0]表示元组的第一个数 print(img.height) # 输出:1080,只输出照片的长 print(img.width) # 输出:1920,只输出照片的宽 print('获取(100,100)处像素值:',img.getpixel((100,100))) #输出:(143, 163, 190) Image.new(mode='RGB',size=img.size,color=(255,0,0)).show() #新建一个和img一样大的红色照片

python rgb cmyk 互转 python中rgb_滤镜

 

2、缩放照片

(1)thumbnail(size,resample=3):指定照片的像素,size是大小,resample是重采样滤波器,可以是Image。NEARST、Image.BILINEAR、Image.BICUBIC或者Image.LANCZOS,默认为image.BICUBIC。

from PIL import Image # 导入pillow库中的Image模块 img=Image.open('2045435.jpg') # 打开照片 print(img.size) # 输出:(1920, 1080) 原照片的大小 img.thumbnail((300,300),resample=Image.BILINEAR) # 将照片缩小为300,300,需要注意的是照片还是按照比例缩小,但是以最长的那条边为基准 print(img.size) # 输出:(300, 169) 缩小后照片的大小 img.save('1.jpg') # 保存照片 img.show() # 显示照片

(2)eval(image,fun):其中image表示输入的图片,fun表示给输入图片的每一个像素应用此函数,fun()函数只允许接受一个整型参数,,如果一个图片含有多个通道,则每个通道都会应用这个函数。

from PIL import Image img=Image.open('2045435.jpg') # 打开照片 Image.eval(img,lambad i :i*2).show() #所有像素值*2

缩放前后的照片对比

python rgb cmyk 互转 python中rgb_Image_02

python rgb cmyk 互转 python中rgb_Image_03

3、旋转照片

rotate(angle,resample=0,expand=0,center=None,translate=None):旋转图片的方向,返回旋转后的图像副本,一个Image对象。angle角度、逆时针旋转、resample从采样滤波器、expand是否展开、center旋转中心(坐标点)、translate旋转后。

旋转和翻转照片 transpose(method):旋转或翻转图像、返回旋转或者翻转后的图像副本,一个Image对象。method可以是Image.FLIP_LEFT_RIGHT(左右翻转)、Image.FLIP_TOP_BOTTOM(上下翻转)、Image.ROTATE_90、Image.ROTATE_180、Image.ROTATE_270、Image.TRANSPOSE或者Image.TRANSVERSE。

from PIL import Image img=Image.open('2045435.jpg') print(img.size) img.show() img.rotate(90,fillcolor=None).resize((1000,1000)).show() # 将照片进行旋转90 img.transpose(Image.FLIP_LEFT_RIGHT).resize((1000,1000))show() # 将照片左右互调位置

旋转照片如下

python rgb cmyk 互转 python中rgb_Image_04

左右翻转照片如下

python rgb cmyk 互转 python中rgb_图像处理_05

4、图片混合

blend(img1,img2,alpha):将两个照片进行混合,其中img1、img2值参与混合的图片1和图片2,alpha指混合透明度,取值是0-1.通过使用这个函数blend(),可以将两幅照片(相同的尺寸)以一定的透明度进行混合,混合的过程是(img1*(1-alpha)+img2 *aplha)。当混合透明度是0时,显示img1原图;混合透明度时1时,显示是img2原图。

from PIL import Image img=Image.open('2045435.jpg') # 原照片 img1=Image.new('RGB',size=img.size,color=(200,200,100)) # 和原照片一样的长度的橙色图像 img3=Image.blend(img,img1,alpha=0.3).show() # 两个相互结合

python rgb cmyk 互转 python中rgb_图像处理_06

5、照片复制和粘贴、剪切

复制图片 Image.copy():

复制指定的图片,这样可以用于在处理或粘贴时需要持有的照片

from PIL import Image img=Image.open('2045435.jpg') img2=img.copy().show() # 复制原照片

 粘贴图片 Image.paste():Image.paste(im,box=None,mask=None),其中im表示原图或者像素值;box表示粘贴的区域,若为(x1,y1)将原图左上角对齐(x1,y1)点,其他超出被粘贴图像的区域被抛弃。若为(x1,y1,x2,y2)原图和此区域一致。若为None,原图和被粘贴的照片大小一致。

剪切图片 Image.crop():

Image.crop(box=None),参数box时一个四元组,分别定义剪切区域的左、上、右、下四个坐标。

from calendar import c from PIL import Image img=Image.open('2045435.jpg') img1=img.copy() # 复制照片 img2=img1.crop((100,100,200,500)) # 剪切照片 img3=Image.new('RGB',[300,300],color=(0,225,225)) # 新建一个图像,400*400的白色图像 img1.paste(img3,(200,200)) # 将img3的内容粘贴到img1上,从x=200和y=200开始粘贴 img1.show() # 展现照片

python rgb cmyk 互转 python中rgb_图像处理_07

6、图像像素的分离和合并

分离照片 Image.split():

使用split()函数可以将图片分割为多个通道列表(分解像素)

 合并照片 Image.merge():

使用merge()可以将一个通道的图像合并到更多通道图像。语法规则是Image.merge(mode,bands)。其中mode指输出图像的模式,bands表示涉及到的像素,一个序列包括单个带图通道。

from PIL import Image img=Image.open(r"C:\Users\踩着上帝的小丑\Pictures\Saved Pictures\1.jpg") img2=Image.open(r"C:\Users\踩着上帝的小丑\Pictures\Saved Pictures\2045435.jpg").resize(img.size) # 需要将两张照片以同一个长宽标准 R1,G1,B1=img.split() # split()将像素区分开来 R2,G2,B2=img2.split() t=R2,G1,B2 # 重新组合像素,变为一个新的像素t img3=Image.merge('RGB',bands=t) # 合并像素,组成一张新的图像

python rgb cmyk 互转 python中rgb_滤镜_08

2.3 使用pillow库中的ImageFilter模块2.3.1 滤镜

在pillow库中的Image模块中,使用函数filter()可以对指定的图片使用滤镜效果,在pillow库中可以用的滤镜保存在ImageFilter模块中。

Image.Filter

调整滤镜 filter(filter):给图片增加滤镜、返回一个Image对象,filter是过滤器。

滤镜的种类

简写

模糊滤镜

BLUR

轮廓滤镜

CONTOUR

细节滤镜

DETAIL

边界增强滤镜

EDGE_ENHANCE

边界增强加强版滤镜

GE_ENHANCE_MORE

浮雕滤镜

EMBOSS

寻找边界滤镜

FUND_EDGES

平滑滤镜

SMOOTH

平滑滤镜加强版

SOOTH_MORE

锐化滤镜

SHARPEN

核滤镜

Kernel

等级滤波

RankFilter

最大值滤波

MaxFilter

最小值滤波

MinFilter

中值滤波滤镜

MedianFilter(size=3)

波形滤镜

ModeFilter

from PIL import Image,ImageFilter # 导入Image和ImageFilter模块 img=Image.open('2045435.jpg') # 加载照片 t=img.filter(ImageFilter.CONTOUR) # 将照片进行轮廓滤镜

python rgb cmyk 互转 python中rgb_滤镜_09

2.4 使用pillow库中的ImageDraw模块

ImageDraw模块实现了绘图功能。可以通过图片的方式来绘制2D图像;还可以在原有的图片上进行绘图,以达到修饰图片进行注释的目的。

在ImageDraw模块绘图时需要首先创建一个ImageDraw.Draw对象,并且提供指向文件的参数,然后引用创建的Draw对象方法进行绘图,最后保存或者直接输出绘图的图像。

2.4.1 绘制直线

DrawObject.line([x1,y1,x2,y2],fill=None,width=0,joint=None)。其中以(x1,y1)为起始点,(x2,y2)为终点画一条直线。[x1,y1,x2,y2]也可以写为(x1,y1,x2,y2)或者[(x1,y1),(x2,y2)];fill表示设数字指定线条的颜色;width设置线条的宽度;joint表示一系列线之间的联合类型,可以时曲线。

2.4.2 图片写字

text(xy, text, fill, font, spacing, direction)

xy是文字左上角起始位置,text是待编辑文字,fill文字颜色。font是个ImageFont的实例,这个我们后面去讲,spacing是字体间距,direction参数是排列的方向,参数值有rtl,ttb两种。不好记?很好记,right to left, top to button。开头缩写而已。

from PIL import Image,ImageDraw,ImageFont # 调用ImageDraw模块进行增加文字,ImageFont模块进行中文处理 img=Image.new('RGB',(200,200),'white') # 创建一个白色背景的图像 draw=ImageDraw.Draw(img) # 新建一个类似画板 draw.rectangle((50,50,150,150),fill='blue',outline='red') # 画一个矩阵,从50*50到150*150,外部线条为红色,整体为蓝色 font=ImageFont.truetype('simhei',20) # 格式化处理,处理中文的不可译的影响 draw.text((70,70),text='张三',font=font,fill='white') # 在画布上写在内容,第一个参数时位置 img.show()

 

python rgb cmyk 互转 python中rgb_python rgb cmyk 互转_10

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3