|
简介
最有效率的方法就是结合编程学习图像处理的相关算法,在实践和具体的案例中理解算法的基本工作原理,同时练习了Python的编程能力,熟悉常用的处理图像的python库。这在学习初期是非常重要的,对以后进一步学习计算机视觉算法、甚至使用神经网络处理图像都非常有意义。
本篇回答针对图像处理,介绍Python中几个常用用于图像处理的工具和标准库,包括:OpenCV, Numpy & Scipy, Scikit-image和PIL(Python Imaging Library)。让初学者尽快上手实践图像处理基本算法。全文干货。
Python开发环境搭建
直接安装Anaconda,支持全平台,而且上面提到的4个标准库除了OpenCV都默认包含在Anaconda中了。而opencv自己单独安装一下就行了。
- conda install -c conda-forge opencv
复制代码 检查一下,确保都安装好了:
环境搭建好之后,就可以进行python开发了。
在实战中,一切的起点是打好python基础,如果你是一个没有python基础的小白,有一个课程很适合,这里面有助教老师辅导答疑+督促学习,让你能保证足够的学习时间。对于零基础的同学来说,有老师带着学比找资料自学高效多了,能少走很多弯路。关键是这个体验课现在是免费的!感兴趣的同学可以点下方一键领取↓
OpenCV
Opencv图像处理库主要专注于实时计算机视觉和图像处理算法,在二维和三维特征工具包、人脸和手势识别、人机交互、移动机器人、物体识别等领域应用广泛。官方教程链接:<a href="http://link.zhihu.com/?target=https%3A//opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html" class=" wrap external" target="_blank" rel="nofollow noreferrer">OpenCV-Python Tutorials ,包含了各种图像算法的讲解和相关代码实现;一个图像平滑算法的例子:
- import cv2
- import numpy as np
- from matplotlib import pyplot as plt
- img = cv2.imread(&#39;opencv_logo.png&#39;)
- blur = cv2.blur(img,(5,5))
- plt.subplot(121),plt.imshow(img),plt.title(&#39;Original&#39;)
- plt.xticks([]), plt.yticks([])
- plt.subplot(122),plt.imshow(blur),plt.title(&#39;Blurred&#39;)
- plt.xticks([]), plt.yticks([])
- plt.show()
复制代码
Numpy & Scipy
图像本质上是多维度数组,用NumPy和SciPy可进行基本图像操纵和处理。特别是子模块scipy.ndimage提供了对n维NumPy数组进行操作的函数。推荐一个使用Numpy和Scipy处理图像的教程:2.6. Image manipulation and processing using Numpy and Scipy下面这个例子展示了如何使用numpy中常规的矩阵操作函数处理图像。
- import numpy as np
- import scipy
- import scipy.misc
- import matplotlib.pyplot as plt
- face = scipy.misc.face(gray=True)
- face[10:13, 20:23]
- face[100:120] = 255
- % 给原图增加一个mask蒙板
- lx, ly = face.shape
- X, Y = np.ogrid[0:lx, 0:ly]
- mask = (X - lx/2)**2 + (Y - ly/2)**2 > lx*ly/4
- face[mask] = 0
- face[range(400), range(400)] = 255
- plt.figure(figsize=(3, 3))
- plt.axes([0, 0, 1, 1])
- plt.imshow(face, cmap=plt.cm.gray)
- plt.axis(&#39;off&#39;)
- plt.show()
复制代码 Scikit-image
scikit-image是一个专门用于图像处理的Python包,并使用NumPy数组作为图像对象,最大的特点就是实现了大量的图像处理算法,可以直接调用相关函数,非常方便图像的预处理等。推荐教程:3.3. Scikit-image: image processing下面演示的就是图像处理中常用的大津(OTSU)算法,用于确定图像二值化分割阈值,可以调用ostu()函数。
- import matplotlib.pyplot as plt
- from skimage import data
- from skimage import filters
- from skimage import exposure
- camera = data.camera()
- val = filters.threshold_otsu(camera)
- hist, bins_center = exposure.histogram(camera)
- plt.figure(figsize=(9, 4))
- plt.subplot(131)
- plt.imshow(camera, cmap=&#39;gray&#39;, interpolation=&#39;nearest&#39;)
- plt.axis(&#39;off&#39;)
- plt.subplot(132)
- plt.imshow(camera < val, cmap=&#39;gray&#39;, interpolation=&#39;nearest&#39;)
- plt.axis(&#39;off&#39;)
- plt.subplot(133)
- plt.plot(bins_center, hist, lw=2)
- plt.axvline(val, color=&#39;k&#39;, ls=&#39;--&#39;)
- plt.tight_layout()
- plt.show()
复制代码 PIL
在图像上执行基本操作,如创建缩略图,调整大小,旋转,在不同文件格式之间转换等。也是python下常用的图像预处理工具包。官方教程链接:Pillow (PIL Fork) 8.0.1 documentation
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|