python计算机视觉
来源:互联网 发布:c socket linux编程 编辑:程序博客网 时间:2024/05/27 20:14
本文主要内容来源于书籍《python计算机视觉编程》
我是一名初学者,如果你发现文中有错误,请留言告诉我,谢谢
PIL模块
PIL模块全程为Python Imaging Library,是python中一个免费的图像处理模块。
打开图像
PIL模块常用到它的Image类,打开图像首先要导入Image类 from PIL import Image
,
然后调用Image
的open
方法。
例如
from PIL import Imageimage = Image.open("smallpi.jpg") # 返回一个Image图像对象print(image)# 结果<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=800x450 at 0x4731348>
图像的保存及格式转换
图像保存用的是Image对象的save()
方法,传入的参数为保存图像文件的名字。
当传入不同的扩展名时,它会根据扩展名自动转换图像的格式。
例如
from PIL import Imageimage = Image.open("smallpi.jpg") # 打开jpg图像文件image.save("smallpi.png") # 保存图像,并转换成png格式
转化成灰度图像
获得Image对象后,调用其convert()
方法,传入参数"L"
,即可以返回该图像的灰度图像对象。
from PIL import Imageimage = Image.open("smallpi.jpg")image_gray = image.convert("L") # 转化成灰度图像print(image_gray)# 结果<PIL.Image.Image image mode=L size=800x450 at 0x46AD648>
Image对象与图像矩阵相互转化
Image对象转化成图像矩阵
Image对象转化成图像矩阵只要将Image对象作为numpy.array()
参数即可。
import numpy as npfrom PIL import Imageimage = Image.open("smallpi.jpg")image_array = np.array(image)print(image_array)# 结果[[[177 177 177] [177 177 177] [176 176 176] ..., #此处省略 ..., [232 232 232] [232 232 232] [232 232 232]]]
图像矩阵转化成Image对象
图像矩阵转化成Image对象通过Image
模块的fromarray()
方法。
import numpy as npfrom PIL import Imageimage = Image.open("smallpi.jpg")image_array = np.array(image.convert("L"))image_array = 255 - image_array # 图像矩阵处理,将灰度图像反相 # 反相指的是,黑变白,白变黑image2 = Image.fromarray(image_array)print(image2)# 结果<PIL.Image.Image image mode=RGB size=800x450 at 0x4753748>
图像的显示
图像的显示需要用到matplotlib模块。
首先需要到了matplotlib.pyplot import matplotlib.pyplot as plt
然后,调用pyplot的imshow()
方法,传入Image对象即可
from PIL import Imageimport matplotlib.pyplot as pltimage = Image.open("smallpi.jpg")plt.imshow(image) # 绘制图像imageplt.show() # 需要调用show()方法,不然图像只会在内存中而不显示出来
图像显示结果(带坐标轴)
如果想把坐标轴去掉只需要调用pyplot的axis()
方法,传入"off"
参数
from PIL import Imageimport matplotlib.pyplot as pltimage = Image.open("smallpi.jpg")plt.imshow(image) # 绘制图像imageplt.axis("off") # 去掉坐标轴plt.show() # 需要调用show()方法,不然图像只会在内存中而不显示出来
图像显示结果(不带坐标轴)
如果要显示灰度图像,需要导入matplotlib的cm模块 import matplotlib.cm as cm
然后在条用pyplot.show()
时,传入关键字参数cmap=cm.gray
。
from PIL import Image import matplotlib.pyplot as pltimport matplotlib.cm as cm image = Image.open("smallpi.jpg") # 打开图像image_gray = image.convert("L") # 转化成灰度图像plt.subplot(2,1,1)plt.imshow(image_gray) # 没传入关键字参数cmap=cm.grayplt.axis("off") # 去掉坐标轴plt.subplot(2,1,2)plt.imshow(image_gray, cmap=cm.gray) # 指明 cmap=cm.grayplt.axis("off") # 去掉坐标轴plt.show() # 显示图像
显示结果
上:没指定cmap , 下:指定cmap=cm.gray
创建缩略图
创建图像缩略图可以通过Image的thumbnail()
方法,参数传入一个元组,指明缩略图的大小,如thumbnail((128,128))
。
例如
from PIL import Imageimage = Image.open("smallpi.jpg")image_thumbnail = image.thumbnail((128,128))image.save("thumbnail.jpg")
结果为
复制和粘贴区域
复制区域是指截取图像中的一部分,并将这一部分作为一个新的Image对象。
复制区域的方法为crop()
,参数为一个含4个元素的元组,用来指定截取区域的左上角点和右下角点。
from PIL import Imageimage = Image.open("smallpi.jpg") # 打开图像box = (300,100,500,300) # 截取区域image_crop = image.crop(box) # 按指定截取区域对图像进行截取复制image_crop.save("image_crop.jpg") # 保存
保存的截取区域图像为
粘贴区域是指在指定图像中放入另一个图像,其方法为paste()
。该方法有两个参数,第一个参数为需要粘贴进去的图像,第二个参数为粘贴区域。
from PIL import Imageimage = Image.open("smallpi.jpg")box = (300,100,500,300) # 先截取一部分image_crop = image.crop(box) # 为了看到粘贴效果,现将截取部分转180度image_crop = image_crop.transpose(Image.ROTATE_180) # 转180度image.paste(image_crop,box) # 将转180度后的图像粘贴到原图像image.save("image_paste.jpg")
粘贴后原图像变成
图像的尺寸调整和旋转
尺寸调整方法为resize()
,参数为一元组,指定调整后的大小,如resize((128,128))。
rotate()
图像旋转的方法为,参数为旋转角度(数值,单位为度),逆时针方向,如
rotate(45)`
from PIL import Imageimage = Image.open("smallpi.jpg")image_resize = image.resize((200,200)) # 尺寸调整image_rotate = image.rotate(45) # 图像旋转# image.transpose()也可以旋转图像,但只能旋转90度的整数倍# 参数为 Image.ROTATE_90 旋转90度# 180度,270度可类推image_resize.save("image_resize.jpg")image_rotate.save("image_rotate.jpg")
尺寸调整为200*200
图像逆时针旋转45度
图像直方图
图像直方图用来统计图像中像素值的分布情况,即统计不同像素值出现的次数。方法为调用matplotlib.pyplot
的hist
方法,参数传入图像像素序列和统计区间个数。
from PIL import Imageimport matplotlib.pyplot as pltimport matplotlib.cm as cm#打开图像,并转化成灰度图像image = Image.open("smallpi.jpg").convert("L") image_array = np.array(image)plt.subplot(2,1,1)plt.imshow(image,cmap=cm.gray)plt.axis("off")plt.subplot(2,1,2)plt.hist(image_array.flatten(),256) #flatten可以将矩阵转化成一维序列plt.show()
结果为
灰度变换
对于一张灰度图像,其每个像素点都用一个0-255之间的值表示,0表示黑色,越接近0越黑;255表示白色,越接近255越白。
灰度变换就是通过一个特定的函数,使灰度值从一个值转换成另外一个值。
这里列出3种灰度变换
1.【反相】
2.【转化到100-200】
3.【像素平方】
from PIL import Imageimport matplotlib.pyplot as pltimport matplotlib.cm as cmimage = Image.open("smallpi.jpg").convert("L")image_array = np.array(image)x = np.arange(255)# 反相plt.subplot(3,2,1)plt.plot(x,255-x) # 画出变换函数图像plt.subplot(3,2,2)plt.imshow(Image.fromarray(255-image_array),cmap=cm.gray)plt.axis("off")# 转换到 100-200plt.subplot(3,2,3)plt.plot(x,(x/255.0)*100+100) # 画出变换函数图像plt.subplot(3,2,4)plt.imshow( Image.fromarray((image_array/255.0)*100+100), cmap=cm.gray )plt.axis("off")# 像素平方plt.subplot(3,2,5)plt.plot(x,255*(x/255.0)**2) # 画出变换函数图像plt.subplot(3,2,6)plt.imshow( Image.fromarray(255*(image_array/255.0)**2), cmap=cm.gray )plt.axis("off")plt.show()
`结果如下,(左边是变换函数,右边是图像变换结果)
直方图均衡化
- 《Python计算机视觉编程》
- python计算机视觉
- Python计算机视觉:安装
- python计算机视觉项目实践
- Python计算机视觉编程 笔记
- python计算机视觉编程-01
- Python计算机视觉工具安装
- 推荐一个计算机视觉图书:python计算机视觉编程
- 推荐一个计算机视觉图书:python计算机视觉编程
- python计算机视觉项目实践 答案
- Python计算机视觉编程练习11:备忘
- Python计算机视觉:第一章 图像处理基础
- Python计算机视觉:第七章 图像搜索
- Python计算机视觉:第九章 图像分割
- Python计算机视觉:第十章 OpenCV
- 《python计算机视觉编程》读书笔记------1
- 《python计算机视觉编程》读书笔记------2
- python计算机视觉-图像内容分类
- 下载代码整理
- Flask Ajax Demo
- 三方通话(二)
- hdu 1754 I hate it
- sicily 1214 二进制回文数的证明
- python计算机视觉
- Cocos2d-x的学习之旅(二)HelloWorld
- 内存泄露、内存溢出以及解决方法
- C++设计模式---策略模式
- FutureTask 源码分析
- QT下实现对Linux Shell调用的几种方法
- kyeremal-poj1330-Nearest Common Ancestors-最近公共祖先
- openfire问题记录
- kyeremal-poj1226-Substrings-模式匹配