python采用计算机视觉库pcv,Python计算机视觉编程-第一章 图像处理基础

图像处理基础

测试1:PIL:Python图像处理类库

PIL(Python Imaging Library,图像处理库)提供了通用的图像处理功能,以及大量有用的基本图像操作。PIL库已经集成在Anaconda库中,推荐使用Anaconda,简单方便,常用库都已经集成。也可以安装python(x,y),但是我一直安装失败,所以就没有装,没有安装也可以自己导入,比如我就是用的pycharm自己导入。

42e10456997165cef35049f639921ae6.png

fd807716b91054044758a29428c451fc.png

00719e22d56560cf19da8f092a7d3e1b.png

如果安装失败,可以添加一些镜像网站,在进行下载

e8f5d89f8a07f4427e142122c5f0d8fd.png

代码不报错之后,运行代码:

59e7de57ae5b7052280325e81ad7a1b5.png

测试代码:

#-*- coding: utf-8 -*-

from PIL importImagefrom pylab import *

#添加中文字体支持

from matplotlib.font_manager importFontProperties

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直接导入

运行结果:

205024f7239c7861cf068665715a05ba.png

测试代码:

#-*- coding: utf-8 -*-

from PIL importImagefrom pylab import *

#添加中文字体支持

from matplotlib.font_manager importFontProperties

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   该模块可以使用快速一维分离的方式来计算卷积

运行结果:

f4a9ac04c383bffef4a2dceb2183aa2f.png

测试代码:

#-*- coding: utf-8 -*-

from PIL importImagefrom pylab import *

from scipy.ndimage importfilters#添加中文字体支持

from matplotlib.font_manager importFontProperties

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,将像素值的范围映射到目标范围的归一化操作)

运行结果:

de8f1a8c482798a3860edc5a4928f2a0.png

测试代码:

#-*- coding: utf-8 -*-

from PIL importImagefrom pylab import *

from PCV.tools importimtools#添加中文字体支持

from matplotlib.font_manager importFontProperties

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

原文:https://www.cnblogs.com/bokeyuancj/p/12345509.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值