Python 图像处理_图像处理的一般步骤

Python 图像处理_图像处理的一般步骤Python图像处理基础对我个人而言使用Python图像处理意在取代matlab,集中化使用Python环境保证之后在机器学习和OpenCV的使用上具有一致性,虽然从实验室师兄师姐的口中得知Python的图像处理较之matlab相对复杂(应该只是代码量的问题),但我依然觉得学习python环境比较实用和高效。在进行Python图像处理之前,Pillow是不可或缺的实用性工具,pillow是Py

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Python图像处理基础

对我个人而言使用Python图像处理意在取代matlab,集中化使用Python环境保证之后在机器学习和OpenCV的使用上具有一致性,虽然从实验室师兄师姐的口中得知Python的图像处理较之matlab相对复杂(应该只是代码量的问题),但我依然觉得学习python环境比较实用和高效。在进行Python图像处理之前,Pillow是不可或缺的实用性工具,pillow是Python Imaging Library的缩写,Pillow由PIL而来,导入该库使用import PIL。同时感谢Python社区内的翻译工作者,将pillow的英文稳当翻译为汉语文档。传统的PIL库不支持python3,所以使用从PIL派生出来的Pillow库。

从学习PIL开始

Python Imaging Library ( PIL ) 给 Python 增加了图像处理能力。这个库提供了广泛的文件格式支持,高效的内部展现,以及十分强大的图像处理能力。以下为我们常用的图像处理功能:

  • 图像存储
    PIL 设计用于图像归档和图像批量处理,可以使用它建立缩略图,转换格式,打印图片等。现在的版本可以验证和读取大量的图片格式。写入有意设计为只能写入常用的文件格式。
  • 图像显示
    现在的版本包含了 Tk PhotoImage 和 BitmapImage 接口, 以及 Windows DIB interface ,这有助于在 Windows 下使用。
    为了方便测试,还提供了 show() 方法,可以保存图像到磁盘并显示。
  • 图像处理
    这个库包含了基本的图像处理功能,包括点操作,使用内置卷积内核过滤,色彩空间转换。支持更改图像大小、旋转、自由变换。有一个直方图方法允许你统计图像,这可以用于对比度增强和全局统计分析。

使用 Image 类

要从文件加载图像,使用 open() 函数, 在 Image 模块:

    @zhangziju
    from PIL import Image             ##调用库
    im = Image.open("E:\mywife.jpg")  ##文件存在的路径
    im.show()                         

我老婆

需要知道的是在win的环境下im.show的方式为win自带的图像显示应用。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.format, im.size, im.mode) ## 打印出关键信息
im.show()

JPEG (750, 560) RGB ## 输出关键信息 同时再次看到我老婆

format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。
size属性是一个二元元组,包含width、height(宽度和高度,单位都是px)。mode 属性定义了图像bands的数量和名称,以及像素类型和深度。
常见的modes 有 “L” (luminance) 表示灰度图像,“RGB”表示真彩色图像,和 “CMYK” 表示出版图像。如下表为常见的nodes描述。

modes 描述
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3× 8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素

读写图像

PIL 模块对目前存在的大多数图片格式都支持,一般使用 Image 模块的 open() 函数从磁盘读取文件,并不需要知道文件格式就能打开它,这个库能够根据文件内容自动确定文件格式。若要保存文件,则使用 Image 类的 save() 方法,此时保存文件的文件名就变得十分重要了,除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存

@zhangziju from PIL import Image im = Image.open("E:\mywife.jpg") print(im) im.save("E:\mywife.png") ## 将"E:\mywife.jpg"保存为"E:\mywife.png" im = Image.open("E:\mywife.png") ##打开新的png图片 print(im.format, im.size, im.mode)

如下图,在指定路径下可看到新保存的png格式的图片。
新的png图片
此时在查看Python的输出信息

PNG (750, 560) RGB

通常而言,save用以保存一个临时的image对象到硬盘。而转换工作由一个功能更为强大的convert()方法来完成。convert()是将图像转换格式的类。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('L')               ##可以看到“L”模式的我老婆,即黑白模式
new_im.show()                          ##用以显示

“L”模式的gakki,同理,可转换其余几种格式,此处略去。

黑白

裁剪、复制、合并等操作

首先引入box的概念,box变量是一个四元组(左,上,右,下)。用来表示在原始图像中截取的位置坐标,如box(100,100,200,200)就表示在原始图像中以左上角为坐标原点,截取一个100*100(像素为单位)的图像,为方便理解,如下为示意图box(b1,a1,b2,a2)。作图软件为Visio2016。
box区域示意图

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box = (300, 100, 700, 700)              ##确定拷贝区域大小
region = im.crop(box)                   ##将im表示的图片对象拷贝到region中,大小为box
region.show()

如下图为box截取的图像区域显示。

box区域图
crop函数带的参数为(起始点的横坐标,起始点的纵坐标,宽度,高度)。paste函数的参数为(需要修改的图片,粘贴的起始点的横坐标,粘贴的起始点的纵坐标)。(待补充)

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box = (300, 100, 700, 700)
region = im.crop(box)
region = region.transpose(Image.ROTATE_180) ##将拷贝的小图旋转180度再放入region中
im.paste(region, box)                       ##粘贴box大小的region到原先的图片对象中。
im.show()

box = im.copy( ) #直接复制图像

如下图所示为旋转和粘贴操作。

粘贴截取图形

几何变换

Image类有resize()、rotate()和transpose()、transform()方法进行几何变换,用以重定义图片大小,对图片进行旋转等操作。

@zhangziju from PIL import Image im = Image.open("E:\mywife.jpg") region = im.resize((400, 400)) ##重新设定大小 region.show()

很明显由于大小的重新设定,图片的显示效果有所转变,gakki依然美腻~
设定大小
还可以做以下操作:

@zhangziju
im.rotate(45)                             #逆时针旋转 45 度角。
im.transpose(Image.FLIP_LEFT_RIGHT)       #左右对换。
im.transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。
im.transpose(Image.ROTATE_90)             #旋转 90 度角。
im.transpose(Image.ROTATE_180)            #旋转 180 度角。
im.transpose(Image.ROTATE_270)            #旋转 270 度角。

图像滤波

图像滤波在ImageFilter 模块中,在该模块中,预先定义了很多增强滤波器,可以通过filter( )函数使用,预定义滤波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,使用该模块时,需先导入。还有其他功能强大的滤波效果,此处略。

@zhangziju
from PIL import Image
from PIL import ImageFilter                         ## 调取ImageFilter
imgF = Image.open("E:\mywife.jpg")
bluF = imgF.filter(ImageFilter.BLUR)                ##均值滤波
conF = imgF.filter(ImageFilter.CONTOUR)             ##找轮廓
edgeF = imgF.filter(ImageFilter.FIND_EDGES)         ##边缘检测
imgF.show()
bluF.show()
conF.show()
edgeF.show()

滤波处理下的gakki~

滤波

图像增强

Pillow中的图像增强函数主要在ImageEnhance模块下,通过该模块可以调节图像的颜色、对比度和饱和度和锐化等。ImageEnhance模块的接口所有的增强类都实现了一个通用的接口,包括一个方法:

enhancer.enhance(factor) ⇒ image

该方法返回一个增强过的图像。变量factor是一个浮点数,控制图像的增强程度。变量factor为1将返回原始图像的拷贝;factor值越小,颜色越少(亮度,对比度等),同时对变量facotr并没有限制。

Color类

颜色增强类用于调整图像的颜色均衡,该类实现的增强接口如下:

ImageEnhance.Color(image) ⇒ Color enhancer instance

创建一个增强对象,以调整图像的颜色。增强因子为0.0将产生黑白图像;为1.0将给出原始图像。

@zhangziju from PIL import Image from PIL import ImageEnhance imcor=Image.open("E:\mywife.jpg") im_01 = ImageEnhance.Color(imcor).enhance(0.1) im_10 = ImageEnhance.Color(imcor).enhance(1.0) im_30 =ImageEnhance.Color(imcor).enhance(3.0) im_01.show() im_10.show() im_30.show()

如下图为ImageEnhance.Color(image)在取值0.1、1.0和3.0时的效果图。

cor

Brightness类

亮度增强类用于调整图像的亮度,该类实现的增强接口如下:

ImageEnhance.Brightness(image)⇒ Brightnessenhancer instance

创建一个调整图像亮度的增强对象。增强因子为0.0将产生黑色图像;为1.0将保持原始图像。

@zhangziju from PIL import Image from PIL import ImageEnhance imbri =Image.open("E:\mywife.jpg") im_02 = ImageEnhance.Brightness(imbri).enhance(0.2) im_08 = ImageEnhance.Brightness(imbri).enhance(0.8) im_20 = ImageEnhance.Brightness(imbri).enhance(2.0) im_02.show() im_08.show() im_20.show()

如下图为ImageEnhance.Brightness(image)在取值0.2、0.8和2.0时的效果图。

bri

Contrast类

对比度增强类用于调整图像的对比度。该类实现的增强接口如下:

ImageEnhance.Contrast(image) ⇒ Contrast enhancer instance

创建一个调整图像对比度的增强对象。增强因子为0.0将产生纯灰色图像;为1.0将保持原始图像。

@zhangziju
from PIL import Image
from PIL import ImageEnhance
imcon =Image.open("E:\mywife.jpg")
im_02 = ImageEnhance.Contrast(imcon).enhance(0.2)
im_08 =ImageEnhance.Contrast (imcon).enhance(0.8)
im_20 =ImageEnhance.Contrast (imcon).enhance(2.0)
im_02.show()
im_08.show()
im_20.show()

如下图为ImageEnhance.Contrast(image)在取值0.2、0.8和2.0时的效果图。

con
同样的还有Sharpness锐度增强类用于调整图像的锐度。此处略。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181990.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号