数字图像处理 第三章 Python图像编辑基础

目录

    • 一、图像处理的常用开发方法
      • 传统VC++图像处理的方法
      • 传统VC++的处理方法——设计CDIB类
      • 传统VC++的处理方法——开发流程
      • Python开发工具
      • Python有关图像处理的库
    • 二、PIL/Pillow图像处理库
      • PIL图像处理库的用途
      • PIL/Pillow库的核心类
      • 保存图像
      • 创建缩略图
      • 几何变换
      • 裁剪、合并、粘贴、拷贝
      • 点处理与滤波器
      • 颜色模式变换
      • 像素操作
      • 图像增强子类——ImageEnhance
    • 三、我们的基本思路
      • 像素级操作
    • 四、应用实例
      • 进阶操作
      • 图像二值化
      • 进阶三——灰度图像二值化

一、图像处理的常用开发方法

  • C、Visual C++:速度快,效率高,开发难度较大
  • C#:提供图像类,入门容易,效率较低;
  • Java:更适合网络开发;
  • Python:第三方库丰富,开发效率低;
  • Delphi、VB:速度慢,开发效率低;

传统VC++图像处理的方法

  • 图像数据读取后放到哪里?
  • DIB设备无关位图文件;
  • 由于MFC没有封装处理与DIB位图相关的Windows API函数的类,所以奔着面向对象的思想,有必要设计一个CDib类;

传统VC++的处理方法——设计CDIB类

数字图像处理 第三章 Python图像编辑基础_第1张图片

传统VC++的处理方法——开发流程

  • 数字图像处理 第三章 Python图像编辑基础_第2张图片

Python开发工具

文本工具类
IDLE,Notepad++ ,Sublime Text
集成工具类
PyCharm,Wing,PyDev&Eclipse,Visual Studio,Anaconda&Spyder(PIL),Canopy

Python有关图像处理的库

  • PIL/Pillow:提供基础的数字图像处理,读出来的文件是PIL的类型;
  • Numpy:图像本质上是包含数据点像素的标准Numpy数组;
  • Scipy:像Numpy一样,可用于基本的图像处理和处理任务;
  • Matplotlib:提供图像和图形数据的可视化输出;
  • skimage:基于Scipy的图像处理包;
  • OpenCV-Python:OpenCV的Python APi;
  • SimpleCV;
  • Mahotas;

二、PIL/Pillow图像处理库

PIL图像处理库的用途

  • 图像归档(创建缩略图,转换图像格式,打印图像)
  • 图像展示,支持多的GUI框架接口
  • 图像处理(点处理,卷积核)

PIL/Pillow库的核心类

  • image类:核心类,加载图像,Imageopen(filename,mode):发开一张图像,返回一个Image对象;
    size属性:表示宽高;
    format属性:表示图像文件的格式,包括JPEG,PNG等;
    mode属性:表示图像的色彩模式’
  • Image.show():显示图像
  • Image.new(mode,(width,height),color):新建图像;

保存图像

  • Image.save(filename,format):保存指定格式的图像;
  • 数字图像处理 第三章 Python图像编辑基础_第3张图片

创建缩略图

  • Image.thumbnail(size,resample):创建缩略图;
  • 第一个参数是指定的缩略图大小;

几何变换

  • Image.transpose(method):返回反转或者旋转后的图像;
  • Image.resize(size,resamole,box):返回改变为size的图像;

裁剪、合并、粘贴、拷贝

  • Image.crop(box):返回矩形区域裁剪后的图像。

点处理与滤波器

  • Image.point(lut,mode):对图像像素进行点操作;
  • Image.filter(filter):对图像进行滤波操作;

颜色模式变换

  • Image.convert():颜色模式变换。

像素操作

  • Image.getpixel(xy):返回给指定位置的像素指。左上角为(0,0)
    如果图象为多通道,则返回一个元组;(8位灰度图像返回单值)
    该方法执行较慢;如果需要较打部分数据,可用load()或者getdata();
  • Image.putpixel(xy,color):改变单个像素点颜色;

图像增强子类——ImageEnhance

  • ImageEnhance:图像增强,增加亮度;

三、我们的基本思路

  • 直接调用有关高级图像处理库及函数完成——忽略细节;
  • 像素级操作(自己写代码进行处理)——初学者推荐;
  • 数字图像处理 第三章 Python图像编辑基础_第4张图片

像素级操作

  • 用Image.getpixel()和Image.putpixel()两个函数对图像进行像素级处理;
  • 核心套路:取像素颜色值——处理——存放像素颜色值;
  • 处理过程可能需要遍历所有或部分像素,而核心的算法在中间的“处理”部分;

四、应用实例

  • 实验1 图像文件的读取与显示
  • 实验目的:通过编写和调试一个读取图像文件中图像数据的程序,加深对图像数据在计算机中存储格式的理解,并为后续打基础;
    熟悉Python开发环境,掌握Pillow库的基本使用方法;
  • 实验内容:用Python编写一个读取并显示图像文件的程序;
  • 实验步骤:导入PIL库(import);打开图像文件,并获得文件对象(open());输出图像的大小、格式、色彩模型;显示图像(show());将图像另存为jpg格式(save());
  • 代码:数字图像处理 第三章 Python图像编辑基础_第5张图片
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 26 08:32:21 2020

@author: 拔牙不打麻药
"""
from PIL import Image;
im=Image.open('C:\课堂\数字图像处理\实验参考图像\实验参考图像\lena_256.bmp')
print(im.size,im.format,im.mode)
im.show()
im.save("1.jpg")

在这里插入图片描述


实验要等下节课再讲了,上边的图片都是直播的时候截的,全损画质嘿嘿。

进阶操作

  • 进阶一:获取图像第一个位置像素的颜色值,并输出颜色值;(记得改绝对路径)
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 26 08:32:21 2020

@author: 拔牙不打麻药
"""
from PIL import Image;
import numpy as np;
import skimage.io;
#im=Image.open('C:\课堂\数字图像处理\实验参考图像\实验参考图像\lena_256.bmp')
im=Image.open(r'C:\课堂\数字图像处理\实验参考图像\实验参考图像\airplane_512color.jpg')
print(im.size,im.format,im.mode)
width,height=im.size
im_new=im.copy()
#im.show()
#im.save("1.jpg")
###输出第一个像素的rgb
print("第一个像素的颜色值为"+str(im.getpixel((0,0))))

数字图像处理 第三章 Python图像编辑基础_第6张图片
数字图像处理 第三章 Python图像编辑基础_第7张图片

  • 进阶二:改变图像第一个位置像素的颜色值为白色;(要用彩色图像,因为我用的是三位rgb)
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 26 08:32:21 2020

@author: 拔牙不打麻药
"""
from PIL import Image;
import numpy as np;
import skimage.io;
#im=Image.open('C:\课堂\数字图像处理\实验参考图像\实验参考图像\lena_256.bmp')
im=Image.open(r'C:\课堂\数字图像处理\实验参考图像\实验参考图像\airplane_512color.jpg')
print(im.size,im.format,im.mode)
width,height=im.size
im_new=im.copy()
#im.show()
#im.save("1.jpg")
###输出第一个像素的rgb
print("第一个像素的颜色值为"+str(im.getpixel((0,0))))

im.putpixel((0,0),(255,255,255))#改变图像第一个位置像素的颜色
print("改变后的颜色为"+str(im.getpixel((0,0))))

数字图像处理 第三章 Python图像编辑基础_第8张图片
数字图像处理 第三章 Python图像编辑基础_第9张图片

  • 进阶三:图像二值化处理;
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 26 08:32:21 2020

@author: 拔牙不打麻药
"""
from PIL import Image;
import numpy as np;
import skimage.io;
im=Image.open('C:\课堂\数字图像处理\实验参考图像\实验参考图像\lena_256.bmp')
#im=Image.open(r'C:\课堂\数字图像处理\实验参考图像\实验参考图像\airplane_512color.jpg')
print(im.size,im.format,im.mode)
width,height=im.size
im_new=im.copy()
#im.show()
#im.save("1.jpg")
###输出第一个像素的rgb
print("第一个像素的颜色值为"+str(im.getpixel((0,0))))

#im.putpixel((0,0),(255,255,255))#改变图像第一个位置像素的颜色
#print("改变后的颜色为"+str(im.getpixel((0,0))))
#判断是否为灰度图像
if (im.mode=='L'):
#灰度图像二值化
    for i in range(width):
        for j in range(height):
            a=im.getpixel((i,j))
            if(a<=128):
                im_new.putpixel((i,j),0)
            else:
                im_new.putpixel((i,j),255)
    im_new.show()

数字图像处理 第三章 Python图像编辑基础_第10张图片

数字图像处理 第三章 Python图像编辑基础_第11张图片

图像二值化

  • 算法原理:设t为阈值,如果图像的像素小于阈值,则变化后该点的灰度值为0,繁殖则为255.
  • 分类:灰度图像二值化;彩色图像二值化(有何不同?)

进阶三——灰度图像二值化

数字图像处理 第三章 Python图像编辑基础_第12张图片

# -*- coding: utf-8 -*-
"""
Created on Thu Mar 26 08:32:21 2020

@author: 拔牙不打麻药
"""
from PIL import Image;
import numpy as np;
import skimage.io;
#im=Image.open('C:\课堂\数字图像处理\实验参考图像\实验参考图像\lena_256.bmp')
im=Image.open(r'C:\课堂\数字图像处理\实验参考图像\实验参考图像\airplane_512color.jpg')
print(im.size,im.format,im.mode)
width,height=im.size
im_new=im.copy()
#im.show()
#im.save("1.jpg")
###输出第一个像素的rgb
print("第一个像素的颜色值为"+str(im.getpixel((0,0))))

#im.putpixel((0,0),(255,255,255))#改变图像第一个位置像素的颜色
#print("改变后的颜色为"+str(im.getpixel((0,0))))
#判断是否为灰度图像
if (im.mode=='L'):
#灰度图像二值化
    for i in range(width):
        for j in range(height):
            a=im.getpixel((i,j))
            if(a<=128):
                im_new.putpixel((i,j),0)
            else:
                im_new.putpixel((i,j),255)
    im_new.show()
elif (im.mode=='RGB'):
    #先彩色图像灰度化
    im.show()
    im=im.convert('L')
    img=skimage.io.imread(r'C:\课堂\数字图像处理\实验参考图像\实验参考图像\airplane_512color.jpg')
    #取灰度均值
    average=np.mean(img)
    im.show()
    #再灰度图像二值化
    for i in range(width):
        for j in range(height):
            a=im.getpixel((i,j))
            if(a<=average):
                im.putpixel((i,j),0)
            else:
                im.putpixel((i,j),255)
    im.show()
    



数字图像处理 第三章 Python图像编辑基础_第13张图片
数字图像处理 第三章 Python图像编辑基础_第14张图片


我又来吹高老师了1551怎么会有这么好的老师呢1551为什么给分不能高点呢

你可能感兴趣的:(数字图像处理,计算机视觉,python)