python图像处理,python图像处理工具(Python)
关于【python图像处理】,python图像处理工具,今天犇犇小编给您分享一下,如果对您有所帮助别忘了关注本站哦。
1、python图像处理:10 个 Python 图像编辑工具
以下提到的这些 Python 工具在编辑图像、操作图像底层数据方面都提供了简单直接的方法。
-- Parul Pandey
当今的世界充满了数据,而图像数据就是其中很重要的一部分。但只有经过处理和分析,提高图像的质量,从中提取出有效地信息,才能利用到这些图像数据。
常见的图像处理操作包括显示图像,基本的图像操作,如裁剪、翻转、旋转;图像的分割、分类、特征提取;图像恢复;以及图像识别等等。Python 作为一种日益风靡的科学编程语言,是这些图像处理操作的最佳选择。同时,在 Python 生态当中也有很多可以免费使用的优秀的图像处理工具。
下文将介绍 10 个可以用于图像处理任务的 Python 库,它们在编辑图像、查看图像底层数据方面都提供了简单直接的方法。
1、scikit-image
scikit-image 是一个结合 NumPy 数组使用的开源 Python 工具,它实现了可用于研究、教育、工业应用的算法和应用程序。即使是对于刚刚接触 Python 生态圈的新手来说,它也是一个在使用上足够简单的库。同时它的代码质量也很高,因为它是由一个活跃的志愿者社区开发的,并且通过了 同行评审(peer review)。
资源
scikit-image 的 文档 非常完善,其中包含了丰富的用例。
示例
可以通过导入 skimage 使用,大部分的功能都可以在它的子模块中找到。
图像滤波(image filtering):
import matplotlib.pyplot as plt
%matplotlib inline
from skimage import data,filters
image = data.coins() # ... or any other NumPy array!
edges = filters.sobel(image)
plt.imshow(edges, cmap='gray')
Image filtering in scikit-image
使用 match_template() 方法实现 模板匹配(template matching):
Template matching in scikit-image
在 展示页面 可以看到更多相关的例子。
2、NumPy
NumPy 提供了对数组的支持,是 Python 编程的一个核心库。图像的本质其实也是一个包含像素数据点的标准 NumPy 数组,因此可以通过一些基本的 NumPy 操作(例如切片、 掩膜(mask)、 花式索引(fancy indexing)等),就可以从像素级别对图像进行编辑。通过 NumPy 数组存储的图像也可以被 skimage 加载并使用 matplotlib 显示。
资源
在 NumPy 的 官方文档 中提供了完整的代码文档和资源列表。
示例
使用 NumPy 对图像进行 掩膜(mask)操作:
import numpy as np
from skimage import data
import matplotlib.pyplot as plt
%matplotlib inline
image = data.camera()
type(image)
numpy.ndarray #Image is a NumPy array:
mask = image < 87
image[mask]=255
plt.imshow(image, cmap='gray')
NumPy
3、SciPy
像 NumPy 一样, SciPy 是 Python 的一个核心科学计算模块,也可以用于图像的基本操作和处理。尤其是 SciPy v1.1.0 中的 scipy.ndimage 子模块,它提供了在 n 维 NumPy 数组上的运行的函数。SciPy 目前还提供了 线性和非线性滤波(linear and non-linear filtering)、 二值形态学(binary morphology)、 B 样条插值(B-spline interpolation)、 对象测量(object measurements)等方面的函数。
资源
在 官方文档 中可以查阅到 scipy.ndimage 的完整函数列表。
示例
使用 SciPy 的 高斯滤波 对图像进行模糊处理:
from scipy import misc,ndimage
face = misc.face()
blurred_face = ndimage.gaussian_filter(face, sigma=3)
very_blurred = ndimage.gaussian_filter(face, sigma=5)
#Results
plt.imshow(<image to be displayed>)
Using a Gaussian filter in SciPy
4、PIL/Pillow
PIL (Python Imaging Library) 是一个免费 Python 编程库,它提供了对多种格式图像文件的打开、编辑、保存的支持。但在 2009 年之后 PIL 就停止发布新版本了。幸运的是,还有一个 PIL 的积极开发的分支 Pillow ,它的安装过程比 PIL 更加简单,支持大部分主流的操作系统,并且还支持 Python 3。Pillow 包含了图像的基础处理功能,包括像素点操作、使用内置卷积内核进行滤波、颜色空间转换等等。
资源
Pillow 的 官方文档 提供了 Pillow 的安装说明自己代码库中每一个模块的示例。
示例
使用 Pillow 中的 ImageFilter 模块实现图像增强:
from PIL import Image,ImageFilter
#Read image
im = Image.open('image.jpg')
#Display image
im.show()
from PIL import ImageEnhance
enh = ImageEnhance.Contrast(im)
enh.enhance(1.8).show("30% more contrast")
Enhancing an image in Pillow using ImageFilter
- 源码
5、OpenCV-Python
OpenCV(Open Source Computer Vision 库)是计算机视觉领域最广泛使用的库之一, OpenCV-Python 则是 OpenCV 的 Python API。OpenCV-Python 的运行速度很快,这归功于它使用 C/C++ 编写的后台代码,同时由于它使用了 Python 进行封装,因此调用和部署的难度也不大。这些优点让 OpenCV-Python 成为了计算密集型计算机视觉应用程序的一个不错的选择。
资源
入门之前最好先阅读 OpenCV2-Python-Guide 这份文档。
示例
使用 OpenCV-Python 中的 金字塔融合(Pyramid Blending)将苹果和橘子融合到一起:
Image blending using Pyramids in OpenCV-Python
- 源码
6、SimpleCV
SimpleCV 是一个开源的计算机视觉框架。它支持包括 OpenCV 在内的一些高性能计算机视觉库,同时不需要去了解 位深度(bit depth)、文件格式、 色彩空间(color space)之类的概念,因此 SimpleCV 的学习曲线要比 OpenCV 平缓得多,正如它的口号所说,“将计算机视觉变得更简单”。SimpleCV 的优点还有:
- 即使是刚刚接触计算机视觉的程序员也可以通过 SimpleCV 来实现一些简易的计算机视觉测试
- 录像、视频文件、图像、视频流都在支持范围内
资源
官方文档 简单易懂,同时也附有大量的学习用例。
示例
SimpleCV
7、Mahotas
Mahotas 是另一个 Python 图像处理和计算机视觉库。在图像处理方面,它支持滤波和形态学相关的操作;在计算机视觉方面,它也支持 特征计算(feature computation)、 兴趣点检测(interest point detection)、 局部描述符(local descriptors)等功能。Mahotas 的接口使用了 Python 进行编写,因此适合快速开发,而算法使用 C++ 实现,并针对速度进行了优化。Mahotas 尽可能做到代码量少和依赖项少,因此它的运算速度非常快。可以参考 官方文档 了解更多详细信息。
资源
文档 包含了安装介绍、示例以及一些 Mahotas 的入门教程。
示例
Mahotas 力求使用少量的代码来实现功能。例如这个 Finding Wally 游戏:
Finding Wally problem in Mahotas
Finding Wally problem in Mahotas
- 源码
8、SimpleITK
ITK (Insight Segmentation and Registration Toolkit)是一个为开发者提供普适性图像分析功能的开源、跨平台工具套件, SimpleITK 则是基于 ITK 构建出来的一个简化层,旨在促进 ITK 在快速原型设计、教育、解释语言中的应用。SimpleITK 作为一个图像分析工具包,它也带有 大量的组件 ,可以支持常规的滤波、图像分割、 图像配准(registration)功能。尽管 SimpleITK 使用 C++ 编写,但它也支持包括 Python 在内的大部分编程语言。
资源
有很多 Jupyter Notebooks 用例可以展示 SimpleITK 在教育和科研领域中的应用,通过这些用例可以看到如何使用 Python 和 R 利用 SimpleITK 来实现交互式图像分析。
示例
使用 Python + SimpleITK 实现的 CT/MR 图像配准过程:
SimpleITK animation
- 源码
9、pgmagick
pgmagick 是使用 Python 封装的 GraphicsMagick 库。 GraphicsMagick 通常被认为是图像处理界的瑞士军刀,因为它强大而又高效的工具包支持对多达 88 种主流格式图像文件的读写操作,包括 DPX、GIF、JPEG、JPEG-2000、PNG、PDF、PNM、TIFF 等等。
资源
pgmagick 的 GitHub 仓库 中有相关的安装说明、依赖列表,以及详细的 使用指引 。
示例
图像缩放:
Image scaling in pgmagick
- 源码
边缘提取:
Edge extraction in pgmagick
- 源码
10、Pycairo
Cairo 是一个用于绘制矢量图的二维图形库,而 Pycairo 是用于 Cairo 的一组 Python 绑定。矢量图的优点在于做大小缩放的过程中不会丢失图像的清晰度。使用 Pycairo 可以在 Python 中调用 Cairo 的相关命令。
资源
Pycairo 的 GitHub 仓库 提供了关于安装和使用的详细说明,以及一份简要介绍 Pycairo 的 入门指南 。
示例
使用 Pycairo 绘制线段、基本图形、 径向渐变(radial gradients):
Pycairo
- 源码
总结
以上就是 Python 中的一些有用的图像处理库,无论你有没有听说过、有没有使用过,都值得试用一下并了解它们。
via: https://opensource.com/article/19/3/python-image-manipulation-tools
作者: Parul Pandey 选题: lujun9972 译者: HankChow 校对: wxy
2、python图像处理,python图像处理工具
本文分享自华为云社区《[Python图像处理] 二十五.图像特效处理之素描、怀旧、光照、流年以及滤镜特效-云社区-华为云》,作者: eastmount。
一.图像素描特效图像素描特效会将图像的边界都凸显出来,通过边缘检测及阈值化处理能实现该功能。一幅图像的内部都具有相似性,而在图像边界处具有明显的差异,边缘检测利用数学中的求导来扩大这种变化。但是求导过程中会增大图像的噪声,所以边缘检测之前引入了高斯滤波降噪处理。本文的图像素描特效主要经过以下几个步骤:
- 调用cv2.cvtColor()函数将彩色图像灰度化处理;
- 通过cv2.GaussianBlur()函数实现高斯滤波降噪;
- 边缘检测采用Canny算子实现;
- 最后通过cv2.threshold()反二进制阈值化处理实现素描特效。
其运行代码如下所示。
#coding:utf-8import cv2import numpy as np#读取原始图像img = cv2.imread('scenery.png')#图像灰度处理gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#高斯滤波降噪gaussian = cv2.GaussianBlur(gray, (5,5), 0) #Canny算子canny = cv2.Canny(gaussian, 50, 150)#阈值化处理ret, result = cv2.threshold(canny, 100, 255, cv2.THRESH_BINARY_INV)#显示图像cv2.imshow('src', img)cv2.imshow('result', result)cv2.waitKey()cv2.destroyAllWindows()
最终输出结果如下图所示,它将彩色图像素描处理。原图是作者去年九月份拍摄于喀纳斯,真的很美~
图像的素描特效有很多种方法,本文仅提供了一种方法,主要提取的是图像的边缘轮廓,还有很多更精细的素描特效方法,提取的轮廓更为清晰,如下图所示。希望读者能自行扩展相关算法知识,并实现对应的效果。
二.图像怀旧特效图像怀旧特效是指图像经历岁月的昏暗效果,如图所示,左边“src”为原始图像,右边“dst”为怀旧特效图像。
怀旧特效是将图像的RGB三个分量分别按照一定比例进行处理的结果,其怀旧公式如下所示:
Python实现代码主要通过双层循环遍历图像的各像素点,再结合该公式计算各颜色通道的像素值,最终生成如图所示的效果,其完整代码如下。
#coding:utf-8import cv2import numpy as np#读取原始图像img = cv2.imread('nana.png')#获取图像行和列rows, cols = img.shape[:2]#新建目标图像dst = np.zeros((rows, cols, 3), dtype="uint8")#图像怀旧特效for i in range(rows): for j in range(cols): B = 0.272*img[i,j][2] 0.534*img[i,j][1] 0.131*img[i,j][0] G = 0.349*img[i,j][2] 0.686*img[i,j][1] 0.168*img[i,j][0] R = 0.393*img[i,j][2] 0.769*img[i,j][1] 0.189*img[i,j][0] if B>255: B = 255 if G>255: G = 255 if R>255: R = 255 dst[i,j] = np.uint8((B, G, R)) #显示图像cv2.imshow('src', img)cv2.imshow('dst', dst)cv2.waitKey()cv2.destroyAllWindows()
图像光照特效是指图像存在一个类似于灯光的光晕特效,图像像素值围绕光照中心点呈圆形范围内的增强。如下图所示,该图像的中心点为(192,192),光照特效之后中心圆范围内的像素增强了200。
Python实现代码主要是通过双层循环遍历图像的各像素点,寻找图像的中心点,再通过计算当前点到光照中心的距离(平面坐标系中两点之间的距离),判断该距离与图像中心圆半径的大小关系,中心圆范围内的图像灰度值增强,范围外的图像灰度值保留,并结合边界范围判断生成最终的光照效果。
#coding:utf-8import cv2import mathimport numpy as np#读取原始图像img = cv2.imread('scenery.png')#获取图像行和列rows, cols = img.shape[:2]#设置中心点centerX = rows / 2centerY = cols / 2print centerX, centerYradius = min(centerX, centerY)print radius#设置光照强度strength = 200#新建目标图像dst = np.zeros((rows, cols, 3), dtype="uint8")#图像光照特效for i in range(rows): for j in range(cols): #计算当前点到光照中心距离(平面坐标系中两点之间的距离) distance = math.pow((centerY-j), 2) math.pow((centerX-i), 2) #获取原始图像 B = img[i,j][0] G = img[i,j][1] R = img[i,j][2] if (distance < radius * radius): #按照距离大小计算增强的光照值 result = (int)(strength*( 1.0 - math.sqrt(distance) / radius )) B = img[i,j][0] result G = img[i,j][1] result R = img[i,j][2] result #判断边界 防止越界 B = min(255, max(0, B)) G = min(255, max(0, G)) R = min(255, max(0, R)) dst[i,j] = np.uint8((B, G, R)) else: dst[i,j] = np.uint8((B, G, R)) #显示图像cv2.imshow('src', img)cv2.imshow('dst', dst)cv2.waitKey()cv2.destroyAllWindows()
流年是用来形容如水般流逝的光阴或年华,图像处理中特指将原图像转换为具有时代感或岁月沉淀的特效,其效果如图所示。
Python实现代码如下,它将原始图像的蓝色(B)通道的像素值开根号,再乘以一个权重参数,产生最终的流年效果。
#coding:utf-8import cv2import mathimport numpy as np#读取原始图像img = cv2.imread('scenery.png')#获取图像行和列rows, cols = img.shape[:2]#新建目标图像dst = np.zeros((rows, cols, 3), dtype="uint8")#图像流年特效for i in range(rows): for j in range(cols): #B通道的数值开平方乘以参数12 B = math.sqrt(img[i,j][0]) * 12 G = img[i,j][1] R = img[i,j][2] if B>255: B = 255 dst[i,j] = np.uint8((B, G, R)) #显示图像cv2.imshow('src', img)cv2.imshow('dst', dst)cv2.waitKey()cv2.destroyAllWindows()
滤镜主要是用来实现图像的各种特殊效果,它在Photoshop中具有非常神奇的作用。滤镜通常需要同通道、图层等联合使用,才能取得最佳艺术效果。本小节将讲述一种基于颜色查找表(Look up Table)的滤镜处理方法,它通过将每一个原始颜色进行转换之后得到新的颜色。比如,原始图像的某像素点为红色(R-255, G-0, B-0),进行转换之后变为绿色(R-0, G-255, B-0),之后所有是红色的地方都会被自动转换为绿色,而颜色查找表就是将所有的颜色进行一次(矩阵)转换,很多的滤镜功能就是提供了这么一个转换的矩阵,在原始色彩的基础上进行颜色的转换。
假设现在存在一张新的滤镜颜色查找表,如图所示,它是一张512×512大小,包含各像素颜色分布的图像。下面这张图片另存为本地,即可直接用于图像滤镜处理。
滤镜特效实现的Python代码如下所示,它通过自定义getBRG()函数获取颜色查找表中映射的滤镜颜色,再依次循环替换各颜色。
#coding:utf-8import cv2import numpy as np#获取滤镜颜色def getBGR(img, table, i, j): #获取图像颜色 b, g, r = img[i][j] #计算标准颜色表中颜色的位置坐标 x = int(g/4 int(b/32) * 64) y = int(r/4 int((b2) / 4) * 64) #返回滤镜颜色表中对应的颜色 return lj_map[x][y]#读取原始图像img = cv2.imread('scenery.png')lj_map = cv2.imread('table.png')#获取图像行和列rows, cols = img.shape[:2]#新建目标图像dst = np.zeros((rows, cols, 3), dtype="uint8")#循环设置滤镜颜色for i in range(rows): for j in range(cols): dst[i][j] = getBGR(img, lj_map, i, j) #显示图像cv2.imshow('src', img)cv2.imshow('dst', dst)cv2.waitKey()cv2.destroyAllWindows()
滤镜特效的运行结果如图所示,其中左边“src”为原始风景图像,右边“dst”为滤镜处理后的图像,其颜色变得更为鲜艳,对比度更强。
六.本文小结本篇文章主要讲解了图像常见的特效处理,从处理效果图、算法原理、代码实现三个步骤进行详细讲解,涉及图像素描特效、怀旧特效、光照特效、流年特效、图像滤镜等,这些知识点将为读者从事Python图像处理相关项目实践或科学研究提供一定基础。
参考文献:
本文关键词:python图像处理黑白值,python图像处理库有哪些,python图像处理库,python图像处理入门,python图像处理拼图。这就是关于《python图像处理,python图像处理工具(Python)》的所有内容,希望对您能有所帮助!更多的知识请继续关注《犇涌向乾》百科知识网站:http://www.029ztxx.com!
版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。