Python计算机视觉编程-第一章 图像处理基础
Posted 1711陈健
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python计算机视觉编程-第一章 图像处理基础相关的知识,希望对你有一定的参考价值。
图像处理基础
测试1:PIL:Python图像处理类库
PIL(Python Imaging Library,图像处理库)提供了通用的图像处理功能,以及大量有用的基本图像操作。PIL库已经集成在Anaconda库中,推荐使用Anaconda,简单方便,常用库都已经集成。也可以安装python(x,y),但是我一直安装失败,所以就没有装,没有安装也可以自己导入,比如我就是用的pycharm自己导入。
如果安装失败,可以添加一些镜像网站,在进行下载
代码不报错之后,运行代码:
测试代码:
# -*- coding: utf-8 -*- from PIL import Image from pylab import * # 添加中文字体支持 from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\\windows\\fonts\\SimSun.ttc", size=14) figure() pil_im = Image.open(\'E:/迅雷下载/test_pic/pic1.jpg\') gray() subplot(121) title(u\'原图\',fontproperties=font) axis(\'off\') imshow(pil_im) pil_im = Image.open(\'E:/迅雷下载/test_pic/pic1.jpg\').convert(\'L\') subplot(122) title(u\'灰度图\',fontproperties=font) axis(\'off\') imshow(pil_im) show()
python的代码基本和matlab一致,大概能理解
测试2:图像轮廓和直方图
当在处理数学及绘图或在图像上描点、画直线、曲线时,Matplotlib是一个很好的绘图库,它比PIL库提供了更有力的特性。导入库的方法如上,或者按快捷键alt+enter直接导入
运行结果:
测试代码:
# -*- coding: utf-8 -*- from PIL import Image from pylab import * # 添加中文字体支持 from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\\windows\\fonts\\SimSun.ttc", size=14) im = array(Image.open(\'E:/迅雷下载/test_pic/pic1.jpg\').convert(\'L\')) # 打开图像,并转成灰度图像 figure() subplot(121) gray() contour(im, origin=\'image\') axis(\'equal\') axis(\'off\') title(u\'图像轮廓\', fontproperties=font) subplot(122) hist(im.flatten(), 128) title(u\'图像直方图\', fontproperties=font) plt.xlim([0,260]) plt.ylim([0,11000]) show()
总结:
Image.open——>打开一幅图像 Image.open(\'图片路径/图片名称.jpg\')
array(\'图片\')——>转换成灰度图像
利用hist来绘制直方图:第一个参数为一个一维数组(因为hist只接受一维数组作为输入,所以要用flatten()方法将任意数组按照行优先准则转化成一个一维数组)。第二个参数指定bin的个数
hist(im.flatten(), 128)
测试3:高斯滤波
原理:图像的高斯模糊是非常经典的图像卷积例子。本质上,图像模糊就是将(灰度)图像和一个高斯核进行卷积操作
滤波操作模块——scipy.ndimage.filters 该模块可以使用快速一维分离的方式来计算卷积
运行结果:
测试代码:
# -*- coding: utf-8 -*- 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(\'board.jpeg\')) im = array(Image.open(\'E:/迅雷下载/test_pic/pic1.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) #如果是彩色图像,则分别对三个通道进行模糊 #for bi, blur in enumerate([2, 5, 10]): # im2 = zeros(im.shape) # for i in range(3): # im2[:, :, i] = filters.gaussian_filter(im[:, :, i], blur) # im2 = np.uint8(im2) # subplot(1, 4, 2 + bi) # axis(\'off\') # imshow(im2) show()
总结:标准差越大,图像越来越模糊,
测试4:直方图均衡化
原理:直方图均衡化指将一幅图像的灰度直方图变平,使得变换后的图像中每个灰度值的分布概率都相同,该方法是对灰度值归一化的很好的方法,并且可以增强图像的对比度
直方图均衡化的变换函数是图像中像素值的 累积分布函数 (cumulative distribution function,简写为 cdf,将像素值的范围映射到目标范围的归一化操作)
运行结果:
测试代码:
# -*- coding: utf-8 -*- from PIL import Image from pylab import * from PCV.tools import imtools # 添加中文字体支持 from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\\windows\\fonts\\SimSun.ttc", size=14) im = array(Image.open(\'E:/迅雷下载/test_pic/pic1.jpg\').convert(\'L\')) # 打开图像,并转成灰度图像 #im = array(Image.open(\'../data/AquaTermi_lowcontrast.JPG\').convert(\'L\')) im2, cdf = imtools.histeq(im) figure() subplot(2, 2, 1) axis(\'off\') gray() title(u\'原始图像\', fontproperties=font) imshow(im) subplot(2, 2, 2) axis(\'off\') title(u\'直方图均衡化后的图像\', fontproperties=font) imshow(im2) subplot(2, 2, 3) axis(\'off\') title(u\'原始直方图\', fontproperties=font) #hist(im.flatten(), 128, cumulative=True, normed=True) hist(im.flatten(), 128, normed=True) subplot(2, 2, 4) axis(\'off\') title(u\'均衡化后的直方图\', fontproperties=font) #hist(im2.flatten(), 128, cumulative=True, normed=True) hist(im2.flatten(), 128, normed=True) show()
总结:
图像中像素值的累积分布函数(cdf)是可以将像素值的范围映射到目标范围的归一化操作
因为histeq 函数放到imtools,py中去了,所以调用的时候,需要import imtools——> im2, cdf = imtools.histeq(im)
此时im2就是经过均衡化后的图像了。
代码参考:
http://yongyuan.name/pcvwithpython/chapter1.html
以上是关于Python计算机视觉编程-第一章 图像处理基础的主要内容,如果未能解决你的问题,请参考以下文章