2018-01-19 11:38:10 zhangziju 阅读数 1192
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5422 人正在学习 去看看 贾志刚

Python图像处理基础

对我个人而言使用Python图像处理意在取代matlab,集中化使用Python环境保证之后在机器学习和OpenCV的使用上具有一致性,虽然从实验室师兄师姐的口中得知Python的图像处理较之matlab相对复杂(应该只是代码量的问题),但我依然觉得学习python环境比较实用和高效。在进行Python图像处理之前,Pillow是不可或缺的实用性工具,pillow是Python Imaging Library的缩写,Pillow由PIL而来,导入该库使用import PIL。同时感谢Python社区内的翻译工作者,将pillow的英文稳当翻译为汉语文档。传统的PIL库不支持python3,所以使用从PIL派生出来的Pillow库。

从学习PIL开始

Python Imaging Library ( PIL ) 给 Python 增加了图像处理能力。这个库提供了广泛的文件格式支持,高效的内部展现,以及十分强大的图像处理能力。以下为我们常用的图像处理功能:

  • 图像存储
    PIL 设计用于图像归档和图像批量处理,可以使用它建立缩略图,转换格式,打印图片等。现在的版本可以验证和读取大量的图片格式。写入有意设计为只能写入常用的文件格式。
  • 图像显示
    现在的版本包含了 Tk PhotoImage 和 BitmapImage 接口, 以及 Windows DIB interface ,这有助于在 Windows 下使用。
    为了方便测试,还提供了 show() 方法,可以保存图像到磁盘并显示。
  • 图像处理
    这个库包含了基本的图像处理功能,包括点操作,使用内置卷积内核过滤,色彩空间转换。支持更改图像大小、旋转、自由变换。有一个直方图方法允许你统计图像,这可以用于对比度增强和全局统计分析。

使用 Image 类

要从文件加载图像,使用 open() 函数, 在 Image 模块:

    @zhangziju
    from PIL import Image             ##调用库
    im = Image.open("E:\mywife.jpg")  ##文件存在的路径
    im.show()                         

我老婆

需要知道的是在win的环境下im.show的方式为win自带的图像显示应用。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im.format, im.size, im.mode) ## 打印出关键信息
im.show()

JPEG (750, 560) RGB ## 输出关键信息 同时再次看到我老婆

format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。
size属性是一个二元元组,包含width、height(宽度和高度,单位都是px)。mode 属性定义了图像bands的数量和名称,以及像素类型和深度。
常见的modes 有 “L” (luminance) 表示灰度图像,“RGB”表示真彩色图像,和 “CMYK” 表示出版图像。如下表为常见的nodes描述。

modes 描述
1 1位像素,黑和白,存成8位的像素
L 8位像素,黑白
P 8位像素,使用调色板映射到任何其他模式
RGB 3× 8位像素,真彩
RGBA 4×8位像素,真彩+透明通道
CMYK 4×8位像素,颜色隔离
YCbCr 3×8位像素,彩色视频格式
I 32位整型像素
F 32位浮点型像素

读写图像

PIL 模块对目前存在的大多数图片格式都支持,一般使用 Image 模块的 open() 函数从磁盘读取文件,并不需要知道文件格式就能打开它,这个库能够根据文件内容自动确定文件格式。若要保存文件,则使用 Image 类的 save() 方法,此时保存文件的文件名就变得十分重要了,除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
print(im)
im.save("E:\mywife.png")     ## 将"E:\mywife.jpg"保存为"E:\mywife.png"
im = Image.open("E:\mywife.png")  ##打开新的png图片
print(im.format, im.size, im.mode)

如下图,在指定路径下可看到新保存的png格式的图片。
新的png图片
此时在查看Python的输出信息

PNG (750, 560) RGB

通常而言,save用以保存一个临时的image对象到硬盘。而转换工作由一个功能更为强大的convert()方法来完成。convert()是将图像转换格式的类。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
new_im = im.convert('L')               ##可以看到“L”模式的我老婆,即黑白模式
new_im.show()                          ##用以显示

“L”模式的gakki,同理,可转换其余几种格式,此处略去。

黑白

裁剪、复制、合并等操作

首先引入box的概念,box变量是一个四元组(左,上,右,下)。用来表示在原始图像中截取的位置坐标,如box(100,100,200,200)就表示在原始图像中以左上角为坐标原点,截取一个100*100(像素为单位)的图像,为方便理解,如下为示意图box(b1,a1,b2,a2)。作图软件为Visio2016。
box区域示意图

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box = (300, 100, 700, 700)              ##确定拷贝区域大小
region = im.crop(box)                   ##将im表示的图片对象拷贝到region中,大小为box
region.show()

如下图为box截取的图像区域显示。

box区域图
crop函数带的参数为(起始点的横坐标,起始点的纵坐标,宽度,高度)。paste函数的参数为(需要修改的图片,粘贴的起始点的横坐标,粘贴的起始点的纵坐标)。(待补充)

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
box = (300, 100, 700, 700)
region = im.crop(box)
region = region.transpose(Image.ROTATE_180) ##将拷贝的小图旋转180度再放入region中
im.paste(region, box)                       ##粘贴box大小的region到原先的图片对象中。
im.show()

box = im.copy( ) #直接复制图像

如下图所示为旋转和粘贴操作。

粘贴截取图形

几何变换

Image类有resize()、rotate()和transpose()、transform()方法进行几何变换,用以重定义图片大小,对图片进行旋转等操作。

@zhangziju
from PIL import Image
im = Image.open("E:\mywife.jpg")
region = im.resize((400, 400))     ##重新设定大小
region.show()

很明显由于大小的重新设定,图片的显示效果有所转变,gakki依然美腻~
设定大小
还可以做以下操作:

@zhangziju
im.rotate(45)                             #逆时针旋转 45 度角。
im.transpose(Image.FLIP_LEFT_RIGHT)       #左右对换。
im.transpose(Image.FLIP_TOP_BOTTOM)       #上下对换。
im.transpose(Image.ROTATE_90)             #旋转 90 度角。
im.transpose(Image.ROTATE_180)            #旋转 180 度角。
im.transpose(Image.ROTATE_270)            #旋转 270 度角。

图像滤波

图像滤波在ImageFilter 模块中,在该模块中,预先定义了很多增强滤波器,可以通过filter( )函数使用,预定义滤波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,使用该模块时,需先导入。还有其他功能强大的滤波效果,此处略。

@zhangziju
from PIL import Image
from PIL import ImageFilter                         ## 调取ImageFilter
imgF = Image.open("E:\mywife.jpg")
bluF = imgF.filter(ImageFilter.BLUR)                ##均值滤波
conF = imgF.filter(ImageFilter.CONTOUR)             ##找轮廓
edgeF = imgF.filter(ImageFilter.FIND_EDGES)         ##边缘检测
imgF.show()
bluF.show()
conF.show()
edgeF.show()

滤波处理下的gakki~

滤波

图像增强

Pillow中的图像增强函数主要在ImageEnhance模块下,通过该模块可以调节图像的颜色、对比度和饱和度和锐化等。ImageEnhance模块的接口所有的增强类都实现了一个通用的接口,包括一个方法:

enhancer.enhance(factor) ⇒ image

该方法返回一个增强过的图像。变量factor是一个浮点数,控制图像的增强程度。变量factor为1将返回原始图像的拷贝;factor值越小,颜色越少(亮度,对比度等),同时对变量facotr并没有限制。

Color类

颜色增强类用于调整图像的颜色均衡,该类实现的增强接口如下:

ImageEnhance.Color(image) ⇒ Color enhancer instance

创建一个增强对象,以调整图像的颜色。增强因子为0.0将产生黑白图像;为1.0将给出原始图像。

@zhangziju
from PIL import Image
from PIL import ImageEnhance
imcor=Image.open("E:\mywife.jpg")
im_01 = ImageEnhance.Color(imcor).enhance(0.1)
im_10 = ImageEnhance.Color(imcor).enhance(1.0)
im_30 =ImageEnhance.Color(imcor).enhance(3.0)
im_01.show()
im_10.show()
im_30.show()

如下图为ImageEnhance.Color(image)在取值0.1、1.0和3.0时的效果图。

cor

Brightness类

亮度增强类用于调整图像的亮度,该类实现的增强接口如下:

ImageEnhance.Brightness(image)⇒ Brightnessenhancer instance

创建一个调整图像亮度的增强对象。增强因子为0.0将产生黑色图像;为1.0将保持原始图像。

@zhangziju
from PIL import Image
from PIL import ImageEnhance
imbri =Image.open("E:\mywife.jpg")
im_02 = ImageEnhance.Brightness(imbri).enhance(0.2)
im_08 = ImageEnhance.Brightness(imbri).enhance(0.8)
im_20 = ImageEnhance.Brightness(imbri).enhance(2.0)
im_02.show()
im_08.show()
im_20.show()

如下图为ImageEnhance.Brightness(image)在取值0.2、0.8和2.0时的效果图。

bri

Contrast类

对比度增强类用于调整图像的对比度。该类实现的增强接口如下:

ImageEnhance.Contrast(image) ⇒ Contrast enhancer instance

创建一个调整图像对比度的增强对象。增强因子为0.0将产生纯灰色图像;为1.0将保持原始图像。

@zhangziju
from PIL import Image
from PIL import ImageEnhance
imcon =Image.open("E:\mywife.jpg")
im_02 = ImageEnhance.Contrast(imcon).enhance(0.2)
im_08 =ImageEnhance.Contrast (imcon).enhance(0.8)
im_20 =ImageEnhance.Contrast (imcon).enhance(2.0)
im_02.show()
im_08.show()
im_20.show()

如下图为ImageEnhance.Contrast(image)在取值0.2、0.8和2.0时的效果图。

con
同样的还有Sharpness锐度增强类用于调整图像的锐度。此处略。

2016-10-08 21:57:43 jiandanokok 阅读数 19941
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5422 人正在学习 去看看 贾志刚
版本信息:2.7.11
环境:windows 7 64位系统
编辑器:PyCharm
运行工具:PyCharm
文件地址:D:\phpStudy\WWW\python\Image

一、引入图像模块

1. PIL简介:PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。利用 PIL 中的函数,我们可以从大多数图像格式的文件中读取数据,然后写入最常见的图像格式文件中。PIL 中最重要的模块为 Image 

2. 引入PIL:
  1. from PIL import Image
注意:有一些教程默认是用import Image的,但是在window 的64位系统中如果没有在cmd中执行pip install PIL是找不到Image模块的,所以呢必须先安装Pillow,在cmd中运行pip install Pillow,这里也要变成from PIL import Image

二、读取与存储操作

1. PIL 的 open() 函数用于创建 PIL 图像对象,比如读取一张图片:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
注意:在该路径下必须有qq_image.jpg图片,否则会出错

2. 存储图片:
save() 方法用于保存图像到具有指定文件名的文件。通过 save() 方法,PIL 可以将图像保存成多种格式的文件,PIL 是个足够智能的类库,可以根据文件扩展名来判定图像的格式。比如:img.save('qq_image_thumb.jpg', 'JPEG'),PIL 函数会进行简单的检查,如果文件不是 JPEG 格式,会自动将其转换成 JPEG 格式;如果转换失败,它会在控制台输出一条报告失败的消息。

为了效果,生成缩略图并且保存为qq_image_thumb.jpg:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 生成缩略图
  6. img.thumbnail((128, 128))
  7. # 保存图片
  8. img.save('qq_image_thumb.jpg', 'JPEG')
运行后,进去文件目录:

 

三、图像的一些基本操作

1. 输出图片的信息(格式、尺寸以及图像类型)

  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 输出图片的格式,尺寸以及图像类型
  6. print img.format, img.size, img.mode
输出:JPEG (355, 346) RGB

2. 显示图片

  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 显示图片
  6. img.show()
PyCharm下运行呢,会直接调用Windows照片查看器来显示图片

3. 生成缩略图

thumbnail() 方法接受一个元组参数(该参数指定生成缩略图的大小),然后将图像转换成符合元组参数指定大小的缩略图。
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 生成缩略图
  6. img.thumbnail((128, 128))
  7. # 显示图片
  8. img.show()
这样运行之后就会显示128*128的图片

4. 旋转图片

要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后调用 rotate() 方法:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 逆时针旋转45度
  6. rorate1 = img.rotate(45)
  7. rorate1.show()
  8. # 逆时针旋转90
  9. rorate2 = img.transpose(Image.ROTATE_90)
  10. rorate2.show()
运行后如图:
rorate1:

由于尺寸不变,旋转45度之后会填白

rorate2:

 
注意:只有选择90度,180度以及270度的时候才能用img.transpose(Image.ROTATE_90),其他角度用rotate

5. 翻转

  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 左右对换
  6. rorate3 = img.transpose(Image.FLIP_LEFT_RIGHT)
  7. rorate3.show()
  8. # 上下翻转
  9. rorate4 = img.transpose(Image.FLIP_TOP_BOTTOM)
  10. rorate4.show()
运行后:
rorate3:

 
rorate4:

 

6. 缩放图片

要调整一幅图像的尺寸,我们可以调用 resize() 方法。该方法的参数是一个元组,用来指定新图像的大小:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 缩放图片为50*50
  6. resize1 = img.resize((50, 50))
  7. resize1.show()

7. 图片灰度化

图像的颜色转换可以使用 convert() 方法来实现。要读取一幅图像,并将其转换成灰度图像,只需要加上 convert('L'),如下:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 图片转换为灰度
  6. grey = img.convert('L')
  7. grey.show()
运行后:

 

8. 某个像素点的色彩值的获取以及更改

  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 获取某个像素位置的值
  6. print img.getpixel((100, 100))
  7. # 更改某个像素位置的值
  8. img.putpixel((100, 100), (0, 0, 0))

9. 裁剪图片

使用 crop() 方法可以从一幅图像中裁剪指定区域:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 裁剪图片 box为裁剪图片的区域范围
  6. box = (100, 100, 250, 250)
  7. region = img.crop(box)
  8. region.show()
运行输出:

 注意:Python规定左上角为(0, 0)的坐标点,box由一个4元组(左,上,右,下)定义,表示为坐标为: (left, upper, right, lower),最后的两个数字必须比前面两个要大。如图:


10. 粘贴图片

为了效果,裁剪该图片的一部分然后旋转,最后粘贴到指定区域:
  1. # coding=utf-8
  2. from PIL import Image
  3. # 读取图片
  4. img = Image.open('qq_image.jpg')
  5. # 裁剪图片 box为裁剪图片的区域范围
  6. box = (100, 100, 250, 250)
  7. region = img.crop(box)
  8. region.show()
  9. # 逆时针旋转图片180度
  10. region2 = region.transpose(Image.ROTATE_180)
  11. region2.show()
  12. # 图片的粘贴
  13. img.paste(region2, box)
  14. img.show()
运行:

 

总结:

如果需要更强大的图像处理操作的话,可以使用Matplotlib类库,它具有比PIL更强大的绘图功能,比如说可以绘制出强大的条形图、饼状图、散点图等。





2018-05-31 17:25:45 hanpca 阅读数 822
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5422 人正在学习 去看看 贾志刚

转载:

https://blog.csdn.net/wuxiaobingandbob/article/details/51751899

2018-10-30 16:27:59 wardenjohn 阅读数 1163
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5422 人正在学习 去看看 贾志刚

最近需要学习python的图像处理方法,在这里简单的总结一下自己学到的一些图像处理的方法把~

1.Python PIL库读取图像

import PIL
from PIL import Image

im = Image.open(filepath)

2.简单进行图像旋转

out = im.rotate(270) #这里输入的是旋转角度
out = im.transpose(Image.ROTATE_270)

3.在PIL中还可以吧RGB图像的R,G,B分离出来使用的呢;例如:

r,g,b = im.spilt()
im = Image.merge("RGB",(r,b,g))
#这样R,G,B就调换成了R,B,G来使用了,也就是说B的值当R来使用这个意思
4、图像增强,可以增强一下对比度
from PIL import ImageEnhance as ie
enh = ie.Contrast(image)
enh.enhance(1.3).show("30% enhance")

5、利用Image模块还可以创建thumnail

import glob
for infile in glob.glob("*.jpg"):
    file, ext = os.splitext(infile)
    im = Image.open(infile)
    im.thumbnail((128, 128), Image.ANTIALIAS)
    im.save(file + ".thumbnail", "JPEG")

下面来介绍一下Image模块下的一些函数:

1=》Image.new(mode,size)/Image.new(mode,size,color)

这个是新创建一张图片

2=》Image.open(infile)/Image.open(infile,mode)

这个是打开一张图片,打开的这张图片呢,在你对这张图片进行操作之前是不会读取进来的,在你进行操作的时候就读进来

如果指定了mode的话,那一定是“r“

3=》Image.blend(image1,image2,alpha)

out = image * (1-alpha) + image2 * alpha

看看out你就知道了什么意思了,当alpha是0时,输出的就是image1,当alpha是1时,输出的就是image2

但是两个图像的大小需要一致的

4=》Image.composite(image1,image2,mask)

利用mask当做是alpha,创建一张在image1,image2之间的新图像

5=》Image.eval(function,image)

 

6=>Image.fromstring(mode,size,data)/Image.fromstring(mode,size,data,decoder,parameters)

对于第一个,就是从一个string中的像素数据中创建图像,使用的解码器是”raw“;第二个就是自选decoder了

7=>Image.merge(mode,bands)

 

 

 

2014-08-29 20:03:04 u012236163 阅读数 282
  • Python+OpenCV3.3图像处理视频教程

    Python+OpenCV3.3图像处理视频培训课程:该教程基于Python3.6+OpenCV新版本3.3.0详细讲述Python OpenCV图像处理部分内容,包括opencv人脸识别、人脸检测、数字验证码识别等内容。是Python开发者学习图像知识与应用开发佳实践课程。

    5422 人正在学习 去看看 贾志刚

新人学习python,想做点有意思的,在经历了《python核心编程》之后,从中了解到了python的图像处理能力不错,于是购买了《python :视觉编程》,这是入门的第一篇,希望能一直写下去,见证自己的成长,也希望可以引导后人学习python的图像处理模块


首先是要配置python图像处理的环境,pylab(由Numpy和Scipy构成),还有PIL(Python Imaging Library),具体下载见下面链接

http://www.scipy.org/scipylib/download.html

http://www.pythonware.com/products/pil/

然后入门时的第一个代码:

from PIL import Image
from pylab import *

im = array(Image.open('empire.jpg'))

imshow(im)

x = [100,100,400,400]
y = [200,500,200,500]
plot(x,y,'r*')    #在坐标轴上标记,r*是红色星状
plot(x[:2],y[:2])     #标记作画
plot(x[2:],y[:2])

title('Plotting:"empire.jpg"')

show()




下面这个,是对于原先图片的灰度处理:


from PIL import Image
from pylab import *
im = array(Image.open('empire.jpg').convert('L'))
figure()
gray()
contour(im,origin = 'image')
figure()
axis('equal')
axis('off')
hist(im.flatten(),128)
imshow(im)
title('Plotting:"empire.jpg"')
show()


以下的图片,就是python在建立im这个对象及对象获取图片后的基本显示操作(ps:图片来自GNU,刚好USA窃听 -w-)

Python数字图像处理

阅读数 2025

没有更多推荐了,返回首页