1-python图像处理之PIL,pylab

转自 http://blog.csdn.net/small_mouse0/article/details/53946512

Python计算视觉学习基础,PIL和pylab类库的简单使用,


一. 读图与显示

1.使用pylab中的 imread() 读图

img = imread('图片路径')
 
 
  • 1
  • 1

或者使用PIL中Image的open()方法

img = Image.open('图片路径')
 
 
  • 1
  • 1

2.显示使用pylab中的 imshow()

imshow(img)
 
 
  • 1
  • 1

或者 使用Image中的类(和上面不一样)

img.show()
 
 
  • 1
  • 1

测试用例:

#coding=utf-8
#
# 图片的读取和显示
from PIL import Image
import pylab as plb
#读图1
img = Image.open('test1.jpg')
#使用默认图片打开软件打开
img.show()

#灰度化
grayimg = img.convert('L')
#注意:每次只能显示一张图片,需要关闭上一张
grayimg.show()
#使用python专用的打开图片的软件
plb.imshow(img)
#防止一闪而过
plb.show()
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

二. 新建窗口

使用 pylab 中的 figure() 
试了下,貌似只能和imshow(img)一块使用(python专用的图片查看器)


三. 将图片转存: 
PIL中提供save()方法用来存储多种格式的文件, 
测试用例:

#coding=utf-8
from PIL import Image
import os
#可同时转存多张
filelist = ['F:/myPythonWork/PIL/test1.jpg'];
for infile in filelist:
    outfile = 'outfile' + ".jpg"
    if infile != outfile:
        try:
            Image.open(infile).save(outfile)
        except IOError:
            print "cannot convert", infile
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

PIL 的open() 函数用于创建PIL 图像对象,save() 方法用于保存图像到具有指定文 
件名的文件。除了后缀变为“.jpg”,上述代码的新文件名和原文件名相同。PIL 是 
个足够智能的类库,可以根据文件扩展名来判定图像的格式。PIL 函数会进行简单 
的检查,如果文件不是JPEG 格式,会自动将其转换成JPEG 格式;如果转换失败, 
它会在控制台输出一条报告失败的消息。

图片文件的操作,返回目录下指定文件类型文件名的列表

import os
def get_imlist(path):
    """ 返回目录中所有JPG 图像的文件名列表"""
    return [os.path.join(path,f) for f in os.listdir(path) if f.endswith('.类型')]
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

四. 创建缩略图 
PIL提供了 thumbnail((128,128))方法,可以直接使用图片对象进行调用

#将图片的大小转化为100*100(单位貌似是像素)
img.thumbnail((100,100))
 
 
  • 1
  • 2
  • 1
  • 2

五.复制和粘贴图片的区域

PIL中提供了crop()方法可以从一张图片中裁剪某一区域

#四个元素的元组,分别是左上右下(左上,右下)
box = (100,100,400,400)
region = pil_im.crop(box)
 
 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

然后使用可以使用 paste() 方法将该区域放回去

#旋转180度
region = region.transpose(Image.ROTATE_180)
#放回原处
pil_im.paste(region,box)
 
 
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

六. 调整尺寸和旋转

1.调增尺寸:PIL中提供了 resize() 方法

#将图片 pil_im的大小设为 100*100
out = pil_im.resize((100,100))
 
 
  • 1
  • 2
  • 1
  • 2

2.旋转: 
使用rotate()方法,注意:逆时针方式表示旋转角度

#逆时针旋转45度
out = pil_im.rotate(45)
 
 
  • 1
  • 2
  • 1
  • 2

测试案例:

#coding=utf-8
#使用PIL类库中常见的方法制作一个小案例
#
#读取一张图片,将图片中一部分进行旋转,
#然后整体旋转,最后显示并存储在C盘中
#

from PIL import Image
import pylab as plb
import os

#存储图片
def saveImg(img,type):

    try:
        img.save('C:/test/testr.' + type)
    except IOError:
        return False
    return True

img = Image.open('test1.jpg')
#转化为二值图像
grayImg = img.convert('L')
'''
#显示 默认图片浏览器
grayImg.show()
'''
#设置缩略图
# imgchange1 = grayImg.thumbnail((100,100))
box = (20,20,130,130)
imgchange2 = img.crop(box)
imgchange2 = imgchange2.transpose(Image.ROTATE_180)
grayImg.paste(imgchange2,box)#注意返回值不是图片或者矩阵类型
#显示为灰色 注意:不加的话会显示伪彩色,一种特殊的彩色
plb.gray()
#显示 python专用图片浏览器
plb.figure('demo')  #设置窗口信息
plb.title('demo1')
plb.imshow(grayImg)
#防止一闪而过
plb.show()
if saveImg(grayImg,'jpg'):
    print 'ok'
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

案例结果: 
这里写图片描述 
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值