文章目录

  • PIL
    • 基本操作
      • 读取和创建
      • 基本变换方法
    • 图像处理
      • 图像滤波
      • 图像增强
    • PIL与Numpy
  • OpenCV-python库
    • 读取操作
    • 基本变换
    • 图像处理
      • 图像滤波

Python下可以进行图像处理的第三方库有很多:
最轻巧:PIL: https://pillow.readthedocs.io/en/latest/index.html
最全面:OpenCV: https://docs.opencv.org/4.x/d6/d00/tutorial_py_root.html
其他还有:matplotlib、scipy.misc、scikit-image等。

PIL

PIL库支持图像存储、显示和处理。几乎支持所有的图片格式 可以完成图像的缩放、裁剪、叠加以及向图像添加线条、图像和文字等操作。

PIL库中包含21个与图片相关的类:
最常用的有: Image,ImageEnhance,ImageFilter

基本操作

读取和创建

from PIL import Image

在PIL中,任何图像都可以用Image对象表示

方法 描述
Image.open(filename,mode=‘r’) 根据文件名读取图片
Image.new(mode,size color) 根据给定参数创建一个新图像
Image.fromarray(obj, mode=None) 从array数据创建图像
Image.show() 显示图像
Image.save(fp,format=None) 图像保存(可以完成格式转换)

Image的属性

属性 描述
Image.format 图像格式
Image.filename 图像的文件名或路径
Image.mode 图像色彩模式,L为灰度,RGB为真彩
Image.size 图像的宽和高,返回二元元组

读取序列图片(gif等):使用seek()和tell()方法

基本变换方法

方法 描述 参数解释
Image.convert(mode) 图像转换为新的模式 mode=“L”或“RGB” 或“CMYK.”
Image.thumbnail(size) 创建缩略图 szie-一个元组(长,宽)
Image.rotate(angle) 图像旋转 angel-要旋转的角度
Image.resize(size) 调整图像尺寸 size-一个元组(长,宽)
Image.crop(box) 图像裁剪(ROI) (left, upper, right, lower)-tuple
Image.split()
Image.merge(mode, bands)
提取RGB每个颜色通道
合并通道
mode-图像色彩模式
band-通道(r,g,b)

图像处理

图像处理(Image Processing)是指对图像进行分析、加工、和处理,使其满足视觉、心理或其他要求的技术。

图像滤波

图像滤波采用的是ImageFilter类,通过Image类的filter方法

 def filter(self, filter):"""Filters this image using the given filter.  For a list ofavailable filters, see the :py:mod:`~PIL.ImageFilter` module.:param filter: Filter kernel.:returns: An :py:class:`~PIL.Image.Image` object."""

imobj.filter(ImageFilter.xxx)

常用滤波函数:

方法 描述
ImageFilter.BLUR 模糊效果
ImageFilter.CONTOUR 轮廓效果
ImageFilter.DETAL 细节效果
ImageFilter.EDGE_ENHANCE 边界加强效果
ImageFilter.SMOOTH 平滑效果
ImageFilter.SHARPEN 图像锐化
from PIL import ImageFilter,Image
imobj = Image.open("D:\image.jpg")
imobj.filter(ImageFilter.xxx)

图像增强

使用 ImageEhance 类,常用的方法有:

方法 描述
ImageEhance.enhance(factor) 对选择属性的数值增强factor倍
ImageEhanceColor(im) 调整颜色平衡
ImageEhance.Contrast(im) 调整对比度
ImageEhance.Brightness(im) 调整亮度
ImageEhance.Sharpness(im) 调整锐度

PIL与Numpy

PIL读取的图片是Image对象,不是Numpy矩阵,两者可以进行转化。

im=Image.open("D:\image.jpg") # 读取一张图片
print(im.shape)  # 输出图片的尺寸
im_arr = np.array(im) # 将图片转化为numpy矩阵
print(im_arr.shape) # 输出此时的尺寸

(432,640)
(640,432,3)

注意图片转化为矩阵时,w和h通道会发生改变

OpenCV-python库

读取操作

  • 读取图片:imread
    cv2.imread(filename),读取的图像直接表示ndarray类型的三维矩阵,彩色图片的维度是(h,w,c)

  • 显示图片:imshow
    cv2.imshow(window_name,img),需配合cv2.waitKey()才能显示

import cv2
im=cv2.imread("image.jpg")
cv2.imshow("win_image",im)
cv2.waitKey()
  • 保存图片:imwriter
    cv2.imwrite(filename,image)
  • 图像通道
    用cv2打开的彩色三通道的通道顺序是BGR,而不是RGB。可以使用split()和merge()方法实现通道转换
im=cv2.imread('image.jpg')
b,g,r=cv2.split(im)
im2=cv2.merge((r,g,b))
cv2.imshow('ImWindow',im2)
cv2.waitKey()

基本变换

  • 图像缩放:resize()
    参数:
    src: 输入图像对象
    dsize:输出矩阵/图像的大小,为0时计算方式如下:dsize = Size(round(fxsrc.cols),round(fysrc.rows))
    fx: 水平轴的缩放因子,为0时计算方式: (double)dsize.width/src.cols
    fy: 垂直轴的缩放因子,为0时计算方式: (double)dsize.heigh/src.rows
    interpolation:插值算法
     cv2.INTER_NEAREST : 最近邻插值法
     cv2.INTER_LINEAR 默认值,双线性插值法
     cv2.INTER_AREA 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。
     cv2.INTER_CUBIC 基于4x4像素邻域的3次插值法
      cv2.INTER_LANCZOS4 基于8x8像素邻域的Lanczos插值
    cv2.INTER_AREA 适合于图像缩小, cv2.INTER_CUBIC (slow) & cv2.INTER_LINEAR 适合于图像放大
  • 颜色空间的转换:cv2.cvtColor()

参数: img: 图像对象
code:
cv2.COLOR_RGB2GRAY: RGB转换到灰度模式
cv2.COLOR_RGB2HSV: RGB转换到HSV模式(hue,saturation,Value)
cv2.COLOR_BGR2RGB:RGB通道转换

im=cv2.imread('image.jpg')
gray=cv2.cvtColor(im,COLOR_RGB2GRAY)
cv2.show('gray',gray)
cv2.waitKey()
  • 图像阈值化:cv2.threshold()
    有四个参数,第一个原图像,第二个进行分类的阈值,第三个是高于(低于)阈值时赋予的新值,第四个是一个方法选择参数,常用的有:
    cv2.THRESH_BINARY(黑白二值)
    cv2.THRESH_BINARY_INV(黑白二值反转)
    cv2.THRESH_TRUNC (得到的图像为多像素值)
    cv2.THRESH_TOZERO
    cv2.THRESH_TOZERO_INV
    返回两个值
    ret:阈值
    img:阈值化处理后的图像
  • 旋转:cv2.getRotationMatrix2D()
    参数:
    center:旋转的中心点坐标
    angle:旋转角度,单位为度数,证书表示逆时针旋转
    scale:同方向的放大倍数
    返回2*3的转变矩阵(浮点型)
  • 图像的矩阵变换:transpose()
    OpenCV读入图片的矩阵格式是:(h, w, c)。 深度学习中,因为要对不同通道应用卷积,所以会采取另一种方式(c, h, w)
print(im.shape) # (326,220,3)
im=im.tanspose(2,0,1)
print(im.shape)  # (3,326,222)

在深度学习搭建CNN时,往往要做相应的图像数据处理,比如图像要扩展维度,比如扩展成(batch_size,channels,height,width)

im=np.expand_dims(im,axis=0)
print(im.shape) #(1,3,326,220)

图像处理

图像滤波

参考链接:
http://c.biancheng.net/pillow/picture-format.html
https://www.cnblogs.com/silence-cho/p/10926248.html
https://blog.csdn.net/qq_36941368/article/details/82998296

python图像处理库(PILOpenCV)快速入门学习相关推荐

  1. Python图像处理库PIL从入门到精通

    https://blog.csdn.net/column/details/pythonpil.html 示例: from PIL import Image import pytesseractpyte ...

  2. python多久能上手_小白学习Python,怎样能够快速入门上手

    原标题:小白学习Python,怎样能够快速入门上手 时至今日,Python已经成为最受欢迎的编程语言之一,清晰易读,适用广泛.在TIOBE 排行榜中位居第四,成为名副其实的人工智能第一语言. 那么零基 ...

  3. Python图像处理库PIL -- 学习资源

    Resources 官方指南PIL Handbook(建议看英文,翻译) pil下载 安装中文指南 from the PythonWare PIL home page 推荐先看Python Imagi ...

  4. python符号格式化设置区间_Python 数值区间处理_对interval 库的快速入门详解

    使用 Python 进行数据处理的时候,常常会遇到判断一个数是否在一个区间内的操作.我们可以使用 if else 进行判断,但是,既然使用了 Python,那我们当然是想找一下有没有现成的轮子可以用. ...

  5. Python 快速入门学习

    Python 快速入门学习 python的基本语法 1.1 变量 1.12 如何定义变量 1.13 输出一个变量 1.14 变量的数据类型 1.15 变量的运算 1.16 变量的输入 1.17 变量的 ...

  6. python编程基础语法-Python编程基础语法快速入门

    1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...

  7. pdf python 3.7编程快速入门 潘中强_无python基础,这些书籍可以帮您快速入门。

    利用Python进行数据分析> 定 价:119 元 作者:韦斯·麦金尼(Wes McKinney)著;徐敬一译 ISBN:9787111603702 出 版 社:机械工业出版社 学习Python ...

  8. python基础教程:Python图像处理库PIL中图像格式转换的实现

    这篇文章主要介绍了Python图像处理库PIL中图像格式转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 在数字图像处理 ...

  9. python编程语法教程-Python编程基础语法快速入门

    1. 课程咨询加老师助理微信:助理1微信: chenjinglei88 ,助理2微信: omf6757 2. 决定购买并想得到陈敬雷老师亲自指导(课程或自己项目难题均可)加老师微信: chenjing ...

  10. 跟我学Python图像处理丨带你入门OpenGL

    摘要:介绍Python和OpenGL的入门知识,包括安装.语法.基本图形绘制等. 本文分享自华为云社区<[Python图像处理] 二十七.OpenGL入门及绘制基本图形(一)>,作者:ea ...

最新文章

  1. php如何添加超链接,如何使用phpcms添加超链接
  2. 他保送北大、读完博士选择回中学任教,“做科研太枯燥,自己更适合教书”...
  3. Prim算法生成迷宫
  4. java 实现HTTP连接(HTTPClient)
  5. python可以干什么工作-Python学完工作不好找?看看数据分析可视化都可以做什么...
  6. SpringBoot WebSocket Stomp
  7. PHP面试题:mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
  8. 芋道 Spring Boot 自动配置原理
  9. thinkPHP 数据库操作和分页类
  10. 40个问题让你快速掌握Java多线程的精髓
  11. java移动接口发短信_天天都会写接口,但它的用途和好处有多少人能说得清楚?...
  12. uc浏览器手机模拟_UC、华为、OPPO等8款手机浏览器被重点集中整治!原因是.........
  13. 2019年安大计算机专业分数线,2019年安徽
  14. this与$(this)的区别
  15. Java 8 lambda初试
  16. js html实体编码转换,字符串js编码转换成实体html编码的方法(防范XSS攻击)
  17. 三菱PLC控制步进电机
  18. 启动Kettle时报错找不到文件javaw.exe
  19. Android Camera2 实现连拍
  20. 1991【19CSPS提高组】树的重心 信奥赛Kirito(本人)

热门文章

  1. Eclipse在运行同一包下Java程序出现Error提示框,解决方案
  2. java异常 — — 自定义异常
  3. 车联网白皮书(2021.12)中国信息通信研究院
  4. Java——判断输入时间数据是否有效
  5. python syslog服务器_网络设备的Python Syslog服务器
  6. 【mpeg】mpeg1、mpeg2与mpeg4码流结构区别分析
  7. 利其器--我的编程输入法环境(草稿)
  8. 前端本地存储数据库存储之IndexedDB
  9. 中海达ihand30手簿详细教程_中海达ihand20手簿使用简易说明书
  10. android采集的视频进行旋转