zoukankan      html  css  js  c++  java
  • 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:windowsfontsSimSun.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:windowsfontsSimSun.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:windowsfontsSimSun.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:windowsfontsSimSun.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

  • 相关阅读:
    HDU 4405 Aeroplane chess (概率dp)
    条件编译符号与公布
    hdu 1722 Cake 数学yy
    电脑显示U盘,可是读取不了
    多本Web前端深度修炼书籍(提供网盘下载链接)
    HDU 5410(2015多校10)-CRB and His Birthday(全然背包)
    Servlet体验之旅(二)——Session、Cookie
    <pre>标签
    每天学点Python之comprehensions
    编写html经常使用而又easy忘记的语句
  • 原文地址:https://www.cnblogs.com/bokeyuancj/p/12345509.html
Copyright © 2011-2022 走看看