from skimage import color, viewer, exposure, img_as_float, data
from skimage.transform import SimilarityTransform, warp, swirl
from skimage.util import invert, random_noise, montage
import matplotlib.image as mpimg
import matplotlib.pylab as plt
from scipy.ndimage import affine_transform, zoom
from scipy import misc
### 1.4.1 使用PIL读取、保存和显示图像
PIL的open() 函数用于从Image对象的磁盘读取图像,如下面的代码所示。图像作为PIL.PngImagePlugin.PngImageFile类的对象加载,读者可以用宽度、高度和模式等属性来查找图像的大小[宽度×高度(像素)或分辨率]和模式。
im = Image.open(“…/images/parrot.png”) # read the image, provide the correct path
print(im.width, im.height, im.mode, im.format, type(im))
453 340 RGB PNG <class ‘PIL.PngImagePlugin.PngImageFile’>
im.show() # display the image
运行上述代码,输出结果如图1-5所示,从文件中读取图像,然后再将图像显示在屏幕上。
![img](https://img-blog.csdnimg.cn/img_convert/1424befc0833efb917b76e5f53b3b7c8.png)
图1-5 读取的鹦鹉图像
用PIL函数convert()将彩色RGB图像转换为灰度图像,代码如下:
im_g = im.convert(‘L’) # convert the RGB color image to a grayscale image
im_g.save(‘…/images/parrot_gray.png’) # save the image to disk
Image.open(“…/images/parrot_gray.png”).show() # read the grayscale image from disk and show
运行上述代码,结果如图1-6所示,输出的是鹦鹉的灰度图像。
![img](https://img-blog.csdnimg.cn/img_convert/dcd24785e6fbd581f2eee0e6b4d8b640.png)
图1-6 输出鹦鹉的灰度图像
### 提供磁盘上图像的正确路径
建议创建一个文件夹(子目录)来存储要处理的图像(例如,对于Python代码示例,建议读者使用名为images的文件夹来存储图像),然后提供文件夹的路径以访问图像,以免出现“找不到文件”的异常。
### 1.4.2 使用matplotlib读取、保存和显示图像
接下来演示如何使用matplotlib.image中的imread()函数来读取浮点numpy ndarray中的图像,其中,像素值表示为介于0和1之间的真值。代码如下:
im = mpimg.imread(“…/images/hill.png”) # read the image from disk as a
numpy ndarray
print(im.shape, im.dtype, type(im)) # this image contains anα
channel, hence num_channels= 4
(960, 1280, 4) float32 <class ‘numpy.ndarray’>
plt.figure(figsize=(10,10))
plt.imshow(im) # display the image
plt.axis(‘off’)
plt.show()
运行上述代码,输出结果如图1-7所示。
![img](https://img-blog.csdnimg.cn/img_convert/052ef21363696ab5e5ae5c481323035d.webp?x-oss-process=image/format,png)
图1-7 用imread()函数读取的山峰图像
接下来展示如何将图像更改为较暗的图像。首先将所有像素值设置为0~0.5之间的数,然后将numpy ndarray保存到磁盘。保存的图像将重新加载并显示。代码如下:
im1 = im
im1[im1 < 0.5] = 0 # make the image look darker
plt.imshow(im1)
plt.axis(‘off’)
plt.tight_layout()
plt.savefig(“…/images/hill_dark.png”) # save the dark image
im = mpimg.imread(“…/images/hill_dark.png”) # read the dark image
plt.figure(figsize=(10,10))
plt.imshow(im)
plt.axis(‘off’) # no axis ticks
plt.tight_layout()
plt.show()
运行上述代码,输出结果为较暗的山峰图像,如图1-8所示。
![img](https://img-blog.csdnimg.cn/img_convert/faf3cf9bc7f4a91ce031d9e569b7a275.webp?x-oss-process=image/format,png)
图1-8 较暗的山峰图像
### 使用matplotlib imshow()在显示时插值
matplotlib中的imshow()函数提供了多种不同类型的插值方法用以对图像进行绘制。当被绘制的图像很小时,这些方法特别有用。通过图1-9所示的尺寸为50×50的Lena图像来查看用不同插值方法绘制图像的效果。
![img](https://img-blog.csdnimg.cn/img_convert/9fca3292e6d328657d47409fd733efca.png)
图1-9 Lena图像
如下代码演示了如何通过imshow()使用不同的插值方法:
im = mpimg.imread(“…/images/lena_small.jpg”) # read the image from disk as
a numpy ndarray
methods = [‘none’, ‘nearest’, ‘bilinear’, ‘bicubic’, ‘spline16’, ‘lanczos’]
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(15, 30),subplot_kw={‘xticks’: [],
‘yticks’: []})
fig.subplots_adjust(hspace=0.05, wspace=0.05)
for ax, interp_method in zip(axes.flat, methods):
ax.imshow(im, interpolation=interp_method)
ax.set_title(str(interp_method), size=20)
plt.tight_layout()
plt.show()
运行上述代码,输出结果如图1-10所示。
![img](https://img-blog.csdnimg.cn/img_convert/8dbb05b45c39a19a39b1cea36f91641c.webp?x-oss-process=image/format,png)
图1-10 使用不同插值方法对Lena图像进行处理的效果
### 1.4.3 使用scikit-image读取、保存和显示图像
以下代码演示了如何用scikit-image中的imread()函数读取numpy ndarray中的图像。图像类型为uint8(8位无符号整数),因此图像像素值是介于0和255之间的数。然后,用hsv2rgb()函数从Image.color模块将彩色RGB图像转换为HSV图像(更改图像类型或模式,本书稍后讨论)。接下来,将所有像素点的饱和度(色彩)更改为常量值,但色调和值通道保持不变。这样,图像就被rgb2hsv()函数转换回了RGB模式,以创建新图像,并保存和显示图像。
im = imread(“…/images/parrot.png”) # read image from disk, provide the
correct path
print(im.shape, im.dtype, type(im))
(362, 486, 3) uint8 <class ‘numpy.ndarray’>
hsv = color.rgb2hsv(im) # from RGB to HSV color space
hsv[:, :, 1] = 0.5 # change the saturation
im1 = color.hsv2rgb(hsv) # from HSV back to RGB
imsave(‘…/images/parrot_hsv.png’, im1) # save image to disk
im = imread(“…/images/parrot_hsv.png”)
plt.axis(‘off’), imshow(im), show()
运行上述代码,输出结果如图1-11所示,这是一张饱和度发生变化的鹦鹉新图像。
![img](https://img-blog.csdnimg.cn/img_convert/872a4c0f5a6b144f629240ed23723e4c.png)
图1-11 饱和度发生了变化的鹦鹉新图像
还可以用scikit-image的viewer模块在弹出窗口中显示图像,代码如下:
viewer = viewer.ImageViewer(im)
viewer.show()
### 使用scikit-image的astronaut数据集
以下代码显示了如何使用data模块从scikit-image库的图像数据集中加载(宇航员astronaut)图像。该模块包含一些其他流行的数据集,如cameraman数据集,可以用类似的方法加载。
im = data.astronaut()
imshow(im), show()
运行上述代码,输出结果如图1-12所示。
![img](https://img-blog.csdnimg.cn/img_convert/c9861ca4c6f5e9ccf22c1288d0883481.webp?x-oss-process=image/format,png)
图1-12 使用data模块加载宇航员图像
### 一次性同时读取和显示多个图像
可以用scikit-image的io模块中的imread\_collection()函数将文件名中具有特定模式的所有图像加载到一个文件夹中,并用imshow\_collection()函数同时显示它们。具体代码实现留给读者作为练习。
### 1.4.4 使用SciPy的misc模块读取、保存和显示图像
SciPy的misc模块也可用于图像的输入/输出和显示。下面将演示如何使用misc模块的函数。
### 使用misc的face数据集
以下代码展示了如何显示misc模块的face数据集:
im = misc.face() # load the raccoon’s face image
misc.imsave(‘face.png’, im) # uses the Image module (PIL)
plt.imshow(im), plt.axis(‘off’), plt.show()
运行上述代码,输出结果如图1-13所示,即显示了misc模块的face图像。
![img](https://img-blog.csdnimg.cn/img_convert/5ccc0c914b091b772971808b33df7375.webp?x-oss-process=image/format,png)
图1-13 浣熊脸部图像
读者可以使用misc.imread()从磁盘读取图像,代码如下:
im = misc.imread(‘…/images/pepper.jpg’)
print(type(im), im.shape, im.dtype)
<class ‘numpy.ndarray’> (225, 225, 3) uint8
由于I/O函数的imread()在SciPy 1.0.0中已被弃用,在1.2.0中也即将删除,因此文档建议使用imageio库代替。代码展示了如何使用imageio.imread()函数读取图像,以及如何使用matplotlib显示图像。
import imageio
im = imageio.imread(‘…/images/pepper.jpg’)
print(type(im), im.shape, im.dtype)
<class ‘imageio.core.util.Image’> (225, 225, 3)uint8
plt.imshow(im), plt.axis(‘off’), plt.show()
运行上述代码,输出结果如图1-14所示。
![img](https://img-blog.csdnimg.cn/img_convert/7f071e79e7b341c73a27937a0a65c214.png)
图1-14 读取与显示的辣椒图像
### 1.5 处理不同的文件格式和图像类型并执行基本的图像操作(略)
### 1.6 小结
本章首先介绍了图像处理的入门知识,以及图像处理中欲解决问题的相关基本概念;接着讨论了图像处理的不同任务要求和流程,以及Python中的主要图像处理库,书中将使用这些库进行代码编写;接下来说明了如何在Python中安装不同的图像处理库,以及如何导入它们并从模块中调用函数;还介绍了有关图像类型、文件格式和数据结构的基本概念,以使用不同的Python库存储图像数据;讨论了在Python中如何使用不同的库进行图像输入/输出和显示;最后讨论了如何使用不同的Python库执行基本的图像操作。在第2章中,我们将深入研究图像的采样、量化、卷积、傅里叶变换和频域滤波。
本文摘自[《Python图像处理实战》]
![img](https://img-blog.csdnimg.cn/img_convert/06bf2cff6c3e767fb4e95ab483455e85.png)
* 图像处理,计算机视觉人脸识别图像修复
* 编程入门教程书籍零基础
* 深度学习爬虫,用流行的Python图像处理库、机器学习库和深度学习库解决图像处理问题
本书介绍如何用流行的Python 图像处理库、机器学习库和深度学习库解决图像处理问题。先介绍经典的图像处理技术,然后探索图像处理算法的演变历程,始终紧扣图像处理以及计算机视觉与深度学习方面的\*\*进展。全书共12 章,涵盖图像处理入门基础知识、应用导数方法实现图像增强、形态学图像处理、图像特征提取与描述符、图像分割,以及图像处理中的经典机器学习方法等内容。
本书适合Python 工程师和相关研究人员阅读,也适合对计算机视觉、图像处理、机器学习和深度学习感兴趣的软件工程师参考。
### **最后**
**在学习python中有任何困难不懂的可以微信扫描下方CSDN官方认证二维码加入python交流学习
多多交流问题,互帮互助,这里有不错的学习教程和开发工具。**
(**python兼职资源+python全套学习资料**)
![](https://img-blog.csdnimg.cn/img_convert/eeba0f4db852ce1ec14ee6d40bc09774.png)
### 一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a6067e55c54b49078778d56ea0db7fe2.png)
### 二、Python必备开发工具
![在这里插入图片描述](https://img-blog.csdnimg.cn/e496e6652efd47f5bbe73ad2ee082d4a.png)
### 三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c6ac9e53d20b448ab9f2837b7f173b94.png)
### 四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。![在这里插入图片描述](https://img-blog.csdnimg.cn/7b7d7e133d984b85a09422c3ccfa7396.png)
### 五、Python练习题
检查学习结果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f10f8ee9d86444cb922630d860eb83c0.png)
**最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。**
如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费**学习**大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。
### 一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
### 二、学习软件
工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)
### 三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
![](https://img-blog.csdnimg.cn/img_convert/eec417a3d4d977b313558a11d3c13e43.png)
### 四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
![](https://img-blog.csdnimg.cn/img_convert/ec690501ea1dbe2cb209cbf4013c2477.png)
![](https://img-blog.csdnimg.cn/img_convert/3eaeaa6747419c9d86c72e0d10d0a6a2.png)
### 四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)
### 五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**