用Python做图像处理
<iframe id="alimamaifrm" style="WIDTH: 750px; HEIGHT: 110px" border="0" name="alimamaifrm" marginwidth="0" marginheight="0" src="http://p.alimama.com/cpacode.php?t=A&pid=mm_10108440_0_0&w=750&h=110&rn=1&cn=3&ky=&cid=251602&bgc=FFFFFF&bdc=E6E6E6&tc=0000FF&dc=000000" frameborder="0" width="750" scrolling="no" height="110"></iframe>
在这里,我主要是介绍一下做图像识别时可能会用到的一些 PIL 提供的功能,比如图像增强、还有滤波之类的。最后给出使用 Python 做图像处理与识别的优势与劣势。
基本图像处理
使用 PIL 之前需要 import Image 模块:
import Image
然后你就可以使用Image.open(‘xx.bmp’) 来打开一个位图文件进行处理了。打开文件你不用担心格式,也不用了解格式,无论什么格式,都只要把文件名丢给 Image.open 就可以了。真所谓 bmp、jpg、png、gif……,一个都不能少。
img = Image.open(‘origin.png’) # 得到一个图像的实例对象 img
图 1原图
图像处理中,最基本的就是色彩空间的转换。一般而言,我们的图像都是 RGB 色彩空间的,但在图像识别当中,我们可能需要转换图像到灰度图、二值图等不同的色彩空间。 PIL 在这方面也提供了极完备的支持,我们可以:
new_img = img.convert(‘L’)
把 img 转换为 256 级灰度图像, convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:
· 1 (1-bit pixels, black and white, stored with one pixel per byte)
· L (8-bit pixels, black and white)
· P (8-bit pixels, mapped to any other mode using a colour palette)
· RGB (3x8-bit pixels, true colour)
· RGBA (4x8-bit pixels, true colour with transparency mask)
· CMYK (4x8-bit pixels, colour separation)
· YCbCr (3x8-bit pixels, colour video format)
· I (32-bit signed integer pixels)
· F (32-bit floating point pixels)
怎么样,够丰富吧?其实如此之处,PIL 还有限制地支持以下几种比较少见的色彩模式:LA (L with alpha), RGBX (true colour with padding) and RGBa (true colour with premultiplied alpha)。
下面看一下 mode 为 ‘1’、’L’、’P’时转换出来的图像:
图 2 mode = '1'
图 3 mode = 'L'
图 4 mode = 'P'
convert() 函数也接受另一个隐含参数 matrix,转换矩阵 matrix 是一个长度为4 或者16 tuple。下例是一个转换 RGB 空间到 CIE XYZ 空间的例子:
rgb2xyz = (
0.412453, 0.357580, 0.180423, 0,
0.212671, 0.715160, 0.072169, 0,
0.019334, 0.119193, 0.950227, 0 )
out = im.convert("RGB", rgb2xyz)
除了完备的色彩空间转换能力外, PIL 还提供了resize()、rotate()等函数以获得改变大小,旋转图片等几何变换能力,在图像识别方面,图像实例提供了一个 histogram() 方法来计算直方图,非常方便实用。
图像增强
图像增强通常用以图像识别之前的预处理,适当的图像增强能够使得识别过程达到事半功倍的效果。 PIL 在这方面提供了一个名为 ImageEnhance 的模块,提供了几种常见的图像增强方案:
import ImageEnhance
enhancer = ImageEnhance.Sharpness(image)
for i in range(8):
factor = i / 4.0
enhancer.enhance(factor).show("Sharpness %f" % factor)
上面的代码即是一个典型的使用 ImageEnhance 模块的例子。 Sharpness 是 ImageEnhance 模块的一个类,用以锐化图片。这一模块主要包含如下几个类:Color、Brightness、Contrast和Sharpness。它们都有一个共同的接口 .enhance(factor) ,接受一个浮点参数 factor,标示增强的比例。下面看看这四个类在不同的 factor 下的效果
图 5 使用Color 进行色彩增强,factor 取值 [0, 4],步进 0.5
图 6 用 Birghtness 增强亮度,factor取值[0,4],步进0.5
图 7用 Contrast 增强对比度, factor 取值 [0,4],步进0.5
图 8用 Sharpness 锐化图像,factor取值 [0,4],步进0.5
图像 Filter
PIL 在 Filter 方面的支持是非常完备的,除常见的模糊、浮雕、轮廓、边缘增强和平滑,还有中值滤波、ModeFilter等,简直方便到可以做自己做一个Photoshop。这些 Filter 都放置在 ImageFilter 模块中,ImageFilter主要包括两部分内容,一是内置的 Filter,如 BLUR、DETAIL等,另一部分是 Filter 函数,可以指定不同的参数获得不同的效果。示例如下:
import ImageFilter
im1 = im.filter(ImageFilter.BLUR)
im2 = im.filter(ImageFilter.MinFilter(3))
im3 = im.filter(ImageFilter.MinFilter()) # same as MinFilter(3)
可以看到 ImageFilter 模块的使用非常简单,每一个 Filter 都只需要一行代码就可调用,开发效率非常高。
图 9使用 BLUR
图 10使用 CONTOUR
图 11使用 DETAIL
图 12使用EMBOSS
图 13使用 EDGE_ENHANCE
图 14使用 EDGE_ENHANCE_MORE
图 15使用 FIND_EDGES
图 16使用 SHARPEN
图 17使用 SMOOTH
图 18使用 SMOOTH_MORE
以上是几种内置的 Filter 的效果图,除此之外, ImageFilter 还提供了一些 Filter 函数,下面我们来看看这些可以通过参数改变行为的 Filter 的效果:
图 19使用 Kernel(),参数:size = (3, 3), kernel = (0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5)
图 20使用 MaxFilter,默认参数
图 21使用 MinFilter,默认参数
图 22使用 MedianFilter,默认参数
图 23使用 ModeFilter,参数 size = 3
图 24使用 RankFilter,参数 size = 3, rank = 3
小结
到此,对 PIL 的介绍就告一段落了。总的来说,对于图像处理和识别,PIL 内建了强大的支持,从各种增强算法到 Filter ,都让人无法怀疑使用 Python 的可行性。 Python唯一的劣势在于执行时间过慢,特别是当实现一些计算量大的算法时候,需要极强的耐心。我曾用 Hough Transform(霍夫变换)来查找图像中的直线,纯 Python 的实现处理一个 340 * 100 的图片也要花去数秒时间(P4 3.0G + 1G memory)。但使用 PIL 无需关注图像格式、内建的图像增强算法和 Filter 算法,这些优点使 Python 适合用于构造原型和进行实验,在这两方面Python 比 matlab 更加方便。商业的图像识别产品开发,可以考虑已经被 boost accepted的来自 adobe 的开源 C++ 库 gil,可以兼顾执行性能和开发效率。
<iframe id="alimamaifrm" style="WIDTH: 750px; HEIGHT: 110px" border="0" name="alimamaifrm" marginwidth="0" marginheight="0" src="http://p.alimama.com/cpacode.php?t=A&pid=mm_10108440_0_0&w=750&h=110&rn=1&cn=3&ky=%CA%E9&cid=50000072&bgc=FFFFFF&bdc=E6E6E6&tc=0000FF&dc=000000" frameborder="0" width="750" scrolling="no" height="110"></iframe>
分享到:
相关推荐
本篇文章将深入探讨Python图像处理库以及如何使用它们来执行常见的图像操作,如裁剪、灰度化、旋转和扭曲。 1. **Python图像处理库** Python中最常用的图像处理库有PIL(Python Imaging Library)及其分支Pillow、...
Python 图像处理是使用 Python 语言进行图像处理的技术。Python 语言的面向对象、弱数据类型等特点使得它非常适合进行简单的图像处理任务。PythonWare 公司提供了免费的图像处理工具包 PIL(Python Image Library)...
本课程旨在引导学生熟悉Python编程,了解如何利用Python、NumPy和SciPy进行图像处理,并掌握matplotlib进行图像可视化的基本技巧。通过使用spyder IDE,学生将能更高效地完成课程中的练习,提高解决问题的能力。课程...
在这个实验中,我们学习了如何使用 Python 和 ROS 机器人操作系统来实现图像处理和传输。我们使用了 OpenCV 库来读取和处理图像,然后使用 ROS 机器人操作系统来传输图像。这个实验为我们提供了一个基本的图像处理和...
Python图像处理相关的文档通常会详细介绍如何使用各个库及其函数,帮助开发者快速上手。 综上所述,Python图像处理涵盖了从基础操作到复杂算法的广泛领域,通过熟悉这些知识点,你可以有效地进行图像处理任务,无论...
1. 使用C/C++或其他高级语言(如Python)实现算法,Python因其丰富的库支持,如PIL和OpenCV,成为图像处理的首选语言。 2. 软件设计应包含图形用户界面(GUI),允许用户与系统交互,执行特定的图形和图像处理任务。 3...
在本文中,我们首先介绍了基于Python的图像处理技术,然后详细讲解了如何使用OpenCV库函数对原始图像进行预处理、边缘检测和鱼体尺寸计算。最后,我们对该方法的测试结果进行了分析,证明该方法的可靠性和实用性。 ...
Python在图像处理领域有着广泛的应用,特别是在图像预处理这一环节,它是图像分析和识别的基础步骤。本文将深入探讨Python中的图像预处理技术,包括滤波、边缘检测和图像增强等核心概念。 首先,滤波是图像预处理的...
### 用Python进行图像处理 #### 一、引言 图像处理是一门广泛应用于科学研究、工业生产、医学诊断等多个领域的技术。随着计算机科学的发展,越来越多的编程语言被用于图像处理领域,其中Python因其简洁易学的特点...
在Python中进行图像处理是一项广泛应用于许多领域的技术,包括但不限于科学研究、医学成像、艺术创作、数据可视化和安全监控。本课程设计旨在帮助学生通过实际项目深入理解和掌握计算机图形学和数字图像处理的基础...
在图像处理领域,Python语言因其丰富的库支持和易读性,成为了开发者们首选的工具之一。本项目"图像处理python"旨在提供一个完整的图像处理系统,涵盖了多种图像操作功能,如格式转换、尺寸调整、像素操作、角度旋转...
在本项目中,我们主要探讨的是使用Python编程语言结合OpenCV和Qt库进行数字图像处理。这个大作业涵盖了多个图像处理的重要概念和技术,包括图片的文字添加、空间转换、旋转、缩放、翻转、投影矫正、二值化、图像校正...
Python图像处理实验主要涉及到使用Python语言以及相关的图像处理库,如PIL(Python Imaging Library)或其现代化的分支,Pillow,以及OpenCV等。这些工具提供了丰富的功能,包括图像的读取、显示、保存、裁剪、旋转...
Python在图像处理和识别领域有着广泛的应用,OpenCV是一个强大的图像...以上是Python图像处理和识别的一些核心概念和实战技巧,涵盖了从基础理论到高级应用的广泛内容,对于学习和掌握图像处理技术具有很高的参考价值。
使用python tkinter库实现了一个简易的GUI 实现基本图像处理功能。里面配合了python的opencv2等库的使用,GUI实现得比较简单,但是图像处理的基本功能都有
在图像处理领域,Python语言因其丰富的库支持和易读性而被广泛使用。这个压缩包“image_tutorial”显然是一个图像处理的学习资源,包含了具体的Python程序实例,旨在帮助初学者和有经验的开发者深入理解图像处理技术...
通过"digtal-image-processing-master"这个项目,你可以学习到如何将上述理论应用于实际的编程实践中,理解图像处理的基本原理,并掌握使用Python进行图像处理的技能。这个实验不仅有助于你提升编程能力,也为将来在...
Python图像处理是一个广泛而...以上就是关于Python图像处理的一些基础知识,包括如何使用Pillow库进行图像的打开、裁剪、缩放以及保存。通过深入学习和实践,你将能够掌握更高级的图像处理技术,从而实现更复杂的功能。
### Python在图像处理中的应用 #### 一、Python在图像处理领域的优势 Python作为一种面向对象、解释型的高级编程语言,尽管发展历史不长,但由于其丰富的库支持、易用性和跨平台特性,在图像处理领域得到了广泛...