PIL(Python Image Library) 1.1.16中对像素操作的加速
来源:互联网 发布:sql isnull函数 编辑:程序博客网 时间:2024/05/14 11:00
近来在学习用Python作些图像处理的工作,不断被Python开发的高效率所震撼,而且也感觉到了开发者对运行期效率的重视,不仅在我使用2.5版本时明显感到比原来的2.4版本效率高,就连PIL的新版本中也针对图像的像素操作效率进行了很大的改善。
PIL中效率的改善主要来自于Image模块中的load函数,这个函数是在PIL 1.1.6版本中新增加的,相比于原来的getpixel与putpixel函数,主要的目的就是通过提供图像的缓存操作对象,提高对图像数据读写操作的效率。
这里可以通过一个简单的示例对比两种操作方式的差异,首先打开一个图片文件,同时创建一个相同大小的图片,然后将原始图片的数据逐像素的拷贝到新的图片中,代码如下。该代码在我的机器上运行,对于图像分辨率为2048*1536的图片,只需要5秒钟,而如果采用getpixel与putpixel函数实现(循环体中注释掉的代码),则需要25秒钟,可见load函数对于效率改善非常明显。
import Image
import ImageFilter
ima = Image.open('test.jpg')
size = ima.size
imb = Image.new('RGB', size)
pima = ima.load()
pimb = imb.load()
for i in range(size[0]):
for j in range(size[1]):
pimb[i,j] = pima[i,j] #primb.putpixel((i,j), pima.getpixel((i,j)))
imb.save('test.bmp')
import ImageFilter
ima = Image.open('test.jpg')
size = ima.size
imb = Image.new('RGB', size)
pima = ima.load()
pimb = imb.load()
for i in range(size[0]):
for j in range(size[1]):
pimb[i,j] = pima[i,j] #primb.putpixel((i,j), pima.getpixel((i,j)))
imb.save('test.bmp')
此外,需要提到的是,通过load函数实现的对数据读写加速的办法,已经在PIL的内部非常普遍的使用,比如在Image模块算是比较耗时的filter函数,就已经利用数据缓存对象来提高效率。Image.filter函数的定义如下:
def filter(self, filter):
"Apply environment filter to image"
self.load()
from ImageFilter import Filter
if not isinstance(filter, Filter):
filter = filter()
if self.im.bands == 1:
return self._new(filter.filter(self.im))
# fix to handle multiband images since _imaging doesn't
ims = []
for c in range(self.im.bands):
ims.append(self._new(filter.filter(self.im.getband(c))))
return merge(self.mode, ims)
"Apply environment filter to image"
self.load()
from ImageFilter import Filter
if not isinstance(filter, Filter):
filter = filter()
if self.im.bands == 1:
return self._new(filter.filter(self.im))
# fix to handle multiband images since _imaging doesn't
ims = []
for c in range(self.im.bands):
ims.append(self._new(filter.filter(self.im.getband(c))))
return merge(self.mode, ims)
- PIL(Python Image Library) 1.1.16中对像素操作的加速
- PIL(Python Image Library)常用操作简介
- python图形处理库PIL(Python Image Library)的基本概念
- python图形处理库PIL(Python Image Library)的介绍
- python--PIL操作像素例子
- ecllipse pdev不能支持PIL(python image library)的解决方法
- PIL(Python Image Library)生成验证码
- Python Imageing Library(PIL)--The Image Module
- python中利用PIL(Python Image Library) 将矩阵转换为图片
- python中PIL库的常用操作
- python图形处理库PIL(Python Image Library)
- Install python PIL( Python image Library ) on Ubuntu 11.10 Oneiric
- Python PIL(Python Image Library)使用体会
- Install PIL(Python Image Library) on Mac OSX 10.5
- mac os下安装Python Image Library (PIL)
- PIL(python image library) mac os 扩展处理jpg
- python Image中对图像的一些操作
- PIL Python Imaging Library (PIL)
- web方式的订单提醒
- 利用.net2.0中的GZip或Deflate压缩文件
- 学会记忆--学会遗忘
- 用JavaScript将十进制数转化为二进制数
- 创业事半功倍的17条金律
- PIL(Python Image Library) 1.1.16中对像素操作的加速
- 怀念下51
- CSS学习笔记
- 聊天工具之在线IM服务比较
- 微软的面试题及答案
- JS对联广告(IE,FireFox)
- 带老婆来看看``
- 纪念戒烟
- 都来看看