Python图像处理
2021/9/12 14:34:53
本文主要是介绍Python图像处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今天,博主正式开始了Python图像处理的学习新征程,各位小伙伴们一起来学习吧!
Python利用图像处理库Pillow(PIL)对图片进行处理。
安装与导入
在Linux系统中,只需要输入pip install Pillow
即可
1.图像读取
首先,我们要打开一张图片
from PIL import Image #引入模块 im=Image.open('logo.jpg')#文件路径,模式(如RGB,灰度图等),格式如jpg im.show() 图片显示
打开图片并不是我们的目的,重要的是我们要获取图片的相关数据
from PIL import Image im=Image.open('logo.jpg')#文件路径,模式(如RGB,灰度图等),格式如jpg #im.show() 图片显示 print('图像的格式:', im.format) print('图像的大小:', im.size) print('图像的宽度:', im.width) print('图像的高度:', im.height) # 传入坐标的元组 print('获取某个像素点的颜色值:', im.getpixel((100,100)))
2.图像生成
这是我们读取图像,那么接下来我们可以对图像做一些操作,比如生成一个图像:
在Image模块中,提供了创建图像的方法。主要是通过Image.new(mode, size, color)实现,该方法传入三个参数:
mode:图像的创建模式
size:图像的大小
color:图像的颜色
from PIL import Image # 创建一个简单的图像 im = Image.new('RGB', (100, 100), 'red') # 保存这个图像 im.save('red.png')
3.图像混合
那么接下来我们要做的是图像混合
PIL.Image.alpha_composite(im1, im2) PIL.Image.blend(im1, im2, alpha) PIL.Image.composite(im1, im2, mask)
以上3个函数都是将两个图像进行融合,需要注意的是,被融合的两个图像的mode和size都要相同。这里说明一下,alpha是透明度,mask是一个为“1”,“L”或“RGBA”,size和im1,im2相同的图片。
blend 协调混合,将两张图片进行混合
from PIL import Image # 打开im1 im1 = Image.open('logo.jpg').convert(mode='RGB') # 创建一个和im1大小一样的图像 im2 = Image.new('RGB', im1.size, 'red') # 混合图片,并显示 Image.blend(im1, im2, 0.5).show() #0.5为透明度,取值是0-1。当透明度为0是,显示im1对象;当透明度为1时,显示im2对象
我们可以通过Image.composite(im1, im2, mask)方法实现遮罩混合。三个参数都是Image对象,该方法的作用就是使用mask来混合im1和im2。
注意:im1、im2和mask的大小必须一样
注意r,b,g的生成
split称为拆分图像通道返回值为一个列表对象,对象的元素个数为输入图像的通道数,每个元素为一个二维矩阵,内容为每个通道的数据。如RGB格式的图像,则返回3个元素,每个元素分别对应 R,B,G 三个通道的数据
4.图像缩放
4.1像素值缩放
Image.eval(image,fun)函数对图像的每个像素进行执行函数。
其中fun可以是一个函数或表达式
该函数传入一个参数,即像素点。该函数会对图片中每个像素点进行函数内的操作。
from PIL import Image, ImageDraw, ImageFont img1 = Image.open("logo.jpg") out = Image.eval(img1, lambda i: i * 6) img1.show() out.show()
若使用表达式写法
# 定义一个方法 def func(x): return x*2 # 对图像im每个像素点进行func中的操作,其中func不能加() Image.eval(im, func)
补充
像素点
1、计算机图形的种类从本质上讲,主要有两种计算机图形:一种为位图图像,即是把图像分割成若干个小方格,每个小方格称为一个像素点,由这些像素点排列组成的栅格,.被称为“光栅”,计算机通过表示这些像素点的位置、颜色、亮度等信息,从而表示出整幅图像。
2、数字图像将图像分割成非常细小的点,称为像素点,像素点的值表示该点图像的亮度.但是,近年来的研究指出,利用光合(A)与蒸腾(E)之比获得的水分利用效率(WUE=AE),通常称为瞬时水分利用效率(WUEi),与δ13C不呈现显著的正相关关系。
3、像素点是显示器显示画面的最小发光单位,由红、绿、蓝三个像素单元组成,在彩色显像管中,电子枪通常有三支排列成三角形的单色电子枪组成,称为△(delta)配置,而显示器的荧光层也采用三位一体的荧光体,即含有红色、绿色、蓝色荧光体,它们的排列方式和电子枪的排列方式相同,这三种基色通过不同的亮度组合即可产生各种颜色。
4、屏幕中的像素点越多,画面的分辨率越高,图像就越细腻逼真。
像素也叫分辨率,是指可以显示出的水平和垂直像素的数组,其值通常与若干显示方式相对应。分辨率为1366×768时,就是指在等离子屏幕的横向上 划分了1366 个像素点,竖向上划分了 768 个像素点。分辨率越高,则可接收分辨率的范围越大,则等离子的信号接收范围越广。
图像的深度
图像中像素点占得bit位数,就是图像的深度,比如:
二值图像:图像的像素点不是0 就是1 (图像不是黑色就是白色),图像像素点占的位数就是 1 位,图像的深度就是1,也称作位图。
灰度图像:图像的像素点位于0-255之间,(0:全黑,255代表:全白,在0-255之间插入了255个等级的灰度)。2^8=255,图像的深度是8。
依次轮推,我们把计算机中存储单个像素点所用的 bit 位称为图像的深度。
通道的概念
单通道:也就是通常所说的灰度图,每个像素点只有一个值表示,如果图像的深度是4位(256 =222*2),那么他的像素值0(黑)~255(白);
三通道:也就是通过见到的彩色图,每个像素点有三个值表示,如果图像深度是4位(256 = 222*2),那么他的像素值有红(0-255)、绿(0-255)、蓝(0-255)叠加表示,色彩更加艳丽;
四通道:也就是在三通道图像基础上加上透明程度,Alpha色彩空间,如果图像深度是4位(256 = 222*2),那么0是完全透明,255是完全不透明;
这篇关于Python图像处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南