热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python读入图片,python读入图像

本文目录一览:1、python处理图片数据?2

本文目录一览:


  • 1、python处理图片数据?


  • 2、读取图片


  • 3、Python如何图像识别?

python处理图片数据?

生成一张纯色的图片

先设置图片的颜色,接着利用Image模块的new方法新生成一张图片,png格式的图片需要设置成rgba,类似的还有rgb,L(灰度图等),尺寸设定为640,480,这个可以根据自己的情况设定,颜色同样如此。

批量生成图片

上面生成了一张图片,那要生成十张图片呢,这种步骤一样,只是颜色改变的,利用循环就可以解决。首先创建一个颜色列表,把要生成的图片颜色放进去。接着循环获取不同的颜色,保存的时候利用字符串拼接的方法改变图片的名字。

本地生成的图片

封装成函数

前面的方法已经可以批量生成图片了,为了通用性强一点,我们可以封装成函数,把哪些可以改变的参数单独抽离出来。尺寸也同样,使用的时候,可以根据自己的需要定义颜色列表和尺寸。当然还有加一些提示用语和报错兼容性,这里就不讲了。

本地生成的图片

读取图片

python基础——读取图片

图像后缀名的转换:

要注意的是:对于彩色图像,不管其格式是png,还是bmp,或者jpg,

在PIL中 ,使用Image模块的open()函数打开后,返回的图像对象的模式都是 RGB ,对于灰度图像,不管其图像格式是PNG,还是BMP,JPG,打开后,其模式为灰度L。

PNG BMP JPG彩色图像格式之间的转换:可以通过Image模块的open函数和save函数,具体来说,在打开这些图像时,PIL会将他们解码成三通道的RGB图像。用户可以基于RGB进行处理。处理完毕后可以将其处理结果保存成PNG BMP JPG中任何格式。

PNG BMP JPG灰度图像格式之间的转换,同理也可以通过类似途径,只是解码后时模式为L的图像。

python库可以用来读取图片的库

1. PIL.Image.open  

无论是jpg还是png都能准确读取,PIL.Image.open 不直接返回numpy对象,可以用numpy提供的函数进行转换;

其他模块都直接返回numpy.ndarray对象,通道顺序为RGB,通道值得默认范围为0-255。

拓展:

利用PIL中的Image函数读取出来不是array格式,这时候需要用np.asarray() 或者np.array()函数 。

区别:np.array() 是深拷贝,np.asarray() 是浅拷贝

关于深拷贝和浅拷贝,这里给出一个说明:

Python 中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。

1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。

2. copy.deepcopy 深拷贝 拷贝对象及其子对象

一个很好的例子:

2. cv2.imread

使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255

cv2.imread():读入图片,共两个参数:第一个参数为要读入的图片文件名,第二个参数为如何读取图片(cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:灰度图片;cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道。)

cv2.imread()不能有中文路径,否则读取不出来

cv2.imread() 读出来同样是array形式,但是如果是单通道的图,读出来的是三通道的。

3. matplotlib.image.imread

用于显示图片matplotlib 用于读取图片并且读取出来就是array格式

解决使用plt.savefig 保存图片时一片空白 : 在plt.show() 之前调用 plt.savefig();

4. scipy.ndimage.imread

scipy.ndimage.imread(*args, **kwds)   Use ``matplotlib.pyplot.imread`` instead.

 Returns:imread:ndarray(多维数组)

5. scipy.misc.imread

scipy.misc.imread(name, flatten=False, mode=None)

Use ``imageio.imread`` instead.

返回:imread: ndarray。通过读取图像获得的阵列 。读出来是array 形式,并且按照(H,W,C)形式保存

4. skimage.io.imread

scikit-image和numpy,matplotlib,scikit-learn等包都是Scipy项目的成员,通用numpy数组作为基本数据格式。在python中载入包名为skimage:所得即为numpy数组。

io.imread读出图片格式是uint8(unsigned int);value是numpy array;图像数据是以RGB的格式进行存储的,通道值默认范围0-255。

Python如何图像识别?

1. 简介。

图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,目前版本为 1.1.7,我们可以 在这里 下载学习和查找资料。

Image 类是 PIL 库中一个非常重要的类,通过这个类来创建实例可以有直接载入图像文件,读取处理过的图像和通过抓取的方法得到的图像这三种方法。

2. 使用。

导入 Image 模块。然后通过 Image 类中的 open 方法即可载入一个图像文件。如果载入文件失败,则会引起一个 IOError ;若无返回错误,则 open 函数返回一个 Image 对象。现在,我们可以通过一些对象属性来检查文件内容,即:

1 import Image

2   im = Image.open("j.jpg")

3   print im.format, im.size, im.mode

4 JPEG (440, 330) RGB

这里有三个属性,我们逐一了解。

format : 识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值。

size : 返回的一个元组,有两个元素,其值为象素意义上的宽和高。

mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。

现在,我们可以使用一些在 Image 类中定义的方法来操作已读取的图像实例。比如,显示最新载入的图像:

1 im.show()

2  

输出原图:

3. 函数概貌。

3.1    Reading and Writing Images : open( infilename ) , save( outfilename )

3.2    Cutting and Pasting and Merging Images :

crop() : 从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。

paste() :

merge() :

1 box = (100, 100, 200, 200)

2   region = im.crop(box)

3   region.show()

4   region = region.transpose(Image.ROTATE_180)

5   region.show()

6   im.paste(region, box)

7   im.show()

其效果图为:

旋转一幅图片:

1 def roll(image, delta):

2     "Roll an image sideways"

3

4     xsize, ysize = image.size

5

6     delta = delta % xsize

7     if delta == 0: return image

8

9     part1 = image.crop((0, 0, delta, ysize))

10     part2 = image.crop((delta, 0, xsize, ysize))

11     image.paste(part2, (0, 0, xsize-delta, ysize))

12     image.paste(part1, (xsize-delta, 0, xsize, ysize))

13

14     return image

3.3    几何变换。

3.3.1    简单的几何变换。

1 out = im.resize((128, 128))                     #

2  out = im.rotate(45)                             #逆时针旋转 45 度角。

3  out = im.transpose(Image.FLIP_LEFT_RIGHT)       #左右对换。

4  out = im.transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。

5  out = im.transpose(Image.ROTATE_90)             #旋转 90 度角。

6  out = im.transpose(Image.ROTATE_180)            #旋转 180 度角。

7 out = im.transpose(Image.ROTATE_270)            #旋转 270 度角。

各个调整之后的图像为:

图片1:

图片2:

图片3:

图片4:

3.3.2    色彩空间变换。

convert() : 该函数可以用来将图像转换为不同色彩模式。

3.3.3    图像增强。

Filters : 在 ImageFilter 模块中可以使用 filter 函数来使用模块中一系列预定义的增强滤镜。

1 import ImageFilter

2 imfilter = im.filter(ImageFilter.DETAIL)

3 imfilter.show()

3.4    序列图像。

即我们常见到的动态图,最常见的后缀为 .gif ,另外还有 FLI / FLC 。PIL 库对这种动画格式图也提供了一些基本的支持。当我们打开这类图像文件时,PIL 自动载入图像的第一帧。我们可以使用 seek 和 tell 方法在各帧之间移动。

1 import Image

2 im.seek(1)        # skip to the second frame

3

4 try:

5     while 1:

6         im.seek( im.tell() + 1)

7         # do something to im

8 except EOFError:

9     pass

3.5    更多关于图像文件的读取。

最基本的方式:im = Image.open("filename")

类文件读取:fp = open("filename", "rb"); im = Image.open(fp)

字符串数据读取:import StringIO; im = Image.open(StringIO.StringIO(buffer))

从归档文件读取:import TarIO; fp = TarIo.TarIO("Image.tar", "Image/test/lena.ppm"); im = Image.open(fp)

基本的 PIL 目前就练习到这里。其他函数的功能可点击 这里 进一步阅读。


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
author-avatar
GloryWumie
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有