利用python语言作基础图像处理
对图像作基础处理之前需要先安装PIL(Python Imaging Library, 图像处理类库)。它提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。下载地址:(http://www.pythonware.com/products/pil/)。
一、读取一幅图像
代码如下:
from PIL import Image pil_im = Image.open('D:/aa.jpg') pil_im.show()
pil_im返回的是一个PIL图像对象
运行结果:
如果要将这幅图转成灰度图像,只需要加上convert(‘L’)。
代码如下:
pil_im = Image.open('D:/aa.jpg').convert('L')
运行结果:
二、创建缩略图
使用PIL可以很方便地创建图像的缩略图。thumbnail()方法接受一个元组参数(该参数指定生成缩略图的大小),然后将图像转换成符合元组参数指定大小的缩略图。
代码如下:
from PIL import Image pil_im = Image.open('D:/aa.jpg') print("初始尺寸",pil_im.size) pil_im.thumbnail((128,95)) print("缩略尺寸",pil_im.size)
运行结果:
初始尺寸 (377, 281)
缩略尺寸 (128, 95)
三、调整尺寸和旋转
要调整一幅图像的尺寸,可以调用resize()方法。该方法的参数是一个元组,用来指定新图像的大小。
代码如下:
from PIL import Image pil_im = Image.open('D:/aa.jpg') out = pil_im.resize((128,128)) out.show()
运行结果:
要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后调用rotate()方法。
代码如下:
from PIL import Image pil_im = Image.open('D:/aa.jpg') out = pil_im.rotate(45) out.show()
运行结果:
注意thumbnail()方法和resize()方法的不同之处:
1.resize()方法可以缩小也可以放大,而thumbnail()方法只能缩小;
2.resize()方法不会改变对象的大小,只会返回一个新的Image对象,而thumbnail()方法会直接改变对象的大小,返回值为none;
3.resize()方法中的size参数直接规定了修改后的大小,而thumbnail()方法按比例缩小,size参数只规定修改后size的最大值。
四、复制和粘贴图像区域
使用crop()方法可以从一幅图像中裁剪指定区域。
代码如下:
from PIL import Image pil_im = Image.open('D:/aa.jpg') box = (50,50,200,200) region = pil_im.crop(box) region.show()
运行结果:
要知道box = (50, 50, 200, 200)区域由一个4元组定义,表示为坐标是 (left, upper, right, lower)。 Python Imaging Library 使用左上角为 (0, 0)的坐标系统。同时要注意,这些坐标指向像素之间的位置,因此上述例子中描述的区域的大小为150x150像素。后两个数字需要比前两个大。
接下来我们可以旋转上面的代码中获取的区域,然后使用paste()方法将该区域放回去。
代码如下:
from PIL import Image pil_im = Image.open('D:/aa.jpg') box = (50,50,200,200) region = pil_im.crop(box) region = region.transpose(Image.ROTATE_180) pil_im.paste(region,box) pil_im.show()
运行结果:
五、图像轮廓和直方图
因为绘制轮廓需要对每个坐标[x,y]的像素值施加同一个阈值,所以需要先将图像灰度化。灰度图像的直方图可以使用hist()函数绘制。
代码如下:
from PIL import Image from pylab import * im = array(Image.open('D:/aa.jpg').convert('L')) figure() gray() contour(im,origin='image') axis('equal') axis('off') figure() hist(im.flatten(),128) show()
运行结果:
六、直方图均衡化
直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中的每个灰度值的分布概率都相同。直方图均衡化的变换函数是图像中像素值的累积分布函数(cumulative distribution function,简写为cdf,将像素值的范围映射到目标范围的归一化操作)。
代码如下:
from PIL import Image from pylab import * from numpy import * from PCV.tools import imtools im = array(Image.open('D:/aa.jpg').convert('L')) # 打开图像,并转成灰度图像 im2, cdf = imtools.histeq(im) figure() subplot(2, 2, 1) axis('off') gray() title('Original image') imshow(im) subplot(2, 2, 2) axis('off') title('Equalized image') imshow(im2) subplot(2, 2, 3) axis('off') title('Original histogram') hist(im.flatten(), 128, normed=True) subplot(2, 2, 4) axis('off') title('Equilibrium histogram') hist(im2.flatten(), 128, normed=True) show()
运行结果:
七、高斯模糊
图像的高斯模糊是非常经典的图像卷积例子。Scipy有用来做滤波操作的scipy.ndimage.filters模块。该模块使用快速一维分离的方式来计算卷积。
代码如下:
from PIL import Image from pylab import * from scipy.ndimage import filters from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14) im = array(Image.open('D:/aa.jpg').convert('L')) figure() gray() axis('off') subplot(1, 4, 1) axis('off') title(u'原图', fontproperties=font) imshow(im) for bi, blur in enumerate([2, 5, 10]): im2 = zeros(im.shape) im2 = filters.gaussian_filter(im, blur) im2 = np.uint8(im2) imNum=str(blur) subplot(1, 4, 2 + bi) axis('off') title(u'标准差为'+imNum, fontproperties=font) imshow(im2) show()
运行结果:
- 利用百度AI开放平台的语言处理基础技术(Python)
- OpenCV3计算机视觉Python语言实现(三):使用OpenCV3处理图像
- Python计算机视觉:第一章 图像处理基础
- 利用python做简单的图像处理
- 基本的图像操作和处理示例(Python语言)
- 【脚本语言系列】关于Python基础知识异常处理,你需要知道的事
- Python基础 图像处理标准库 Pillow
- 利用python对图像的基础操作
- 【语言处理与Python】4.1回到基础
- 【AI基础】python:openCV——图像处理(2)
- Python计算机视觉:第一章 图像处理基础
- 利用Python的PIL库进行简单的图像处理
- 【脚本语言系列】关于Python基础知识处理字符串,你需要知道的事
- Python计算机视觉:第一章 图像处理基础
- (转载)Python图像处理(7):利用轮廓分块处理
- 利用python进行图像处理
- opencv-python人眼识别图像处理基础
- Python图像处理基础
- Python语言opencv笔记(四)(图像的阈值处理)
- Python图像处理(7):利用轮廓分块处理