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)


相关推荐

  • 用代码设置 RelativeLayout.LayoutParams

    用代码设置 RelativeLayout.LayoutParams1.注意不能在RelativeLayout容器本身和他的子元素之间产生循环依赖,比如说,不能将RelativeLayout的高设置成为WRAP_CONTENT的时候将子元素的高设置成为ALIGN_PARENT_BOTTOM。如果parent是wrap_content的话,alignParentRight就意味着要求parent的layout_width=”match_par…

  • 8024401c 无法更新,更新失败,更新错误

    8024401c 无法更新,更新失败,更新错误网上的方法不好使的时候,请试试卸载你的360全家桶。再试试更新…

  • 点击率预估算法:FM与FFM[通俗易懂]

    点击率预估算法:FM与FFM[通俗易懂]点击率预估算法:FFM@(计算广告)[计算广告]点击率预估算法FFM1FM1背景11线性模型12二项式模型2FM21FM基本原理22数据分析23参数个数24计算时间复杂度25梯度26训练时间复杂度2FFM1背景及基本原理2模型与最优化问题21模型22最优化问题23自适应学习率24FFM算法的最终形式3完整算法流程31计算梯度32

  • 作用域插槽的使用(四个作用域的区别)

    什么是作用域插槽?其实就是带数据的插槽。父组件可以通过绑定数据传递给子组件,而作用域插槽可以通过子组件绑定数据传递给父组件。作用域的使用场景:既可以复用子组件的slot,又可以使slot内容不一致!代码如下:<divid=”app”><div><emp-list:emps=”empList”><templateslot=”emp”slot-scop..

  • 微信小程序轮播图实现(超简单)「建议收藏」

    微信小程序轮播图实现(超简单)「建议收藏」微信小程序轮播图实现(超简单)微信小程序的轮播图可以用官方给的swiper组件。下图是官方给出的swiper属性,我截取了比较常用的一些属性。效果实现如下图1.普通开发(不采用云开发)1.1wxml<viewclass=”banner”><swiperindicator-dotsindicator-color=”rgba(255,255,255,0.5)”indicator-active-color=”#fff”circularautoplay

  • SOAP协议规范

    SOAP协议规范SOAP协议规范SOAP协议规范1.简介SOAP以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制。SOAP本身并没有定义任何应用程序语义,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型和在模块中编码数据的机制,定义了一个简单的表示应用程序语义的机制。这使SOAP能够被用于从消息传递到RPC的各种系统。SOAP包括三个部

发表回复

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

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