广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现图像压缩和图像处理详解
  • 764
分享到

Python实现图像压缩和图像处理详解

2024-04-02 19:04:59 764人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录入门了解1.颜色入门了解 2. 像素用Pillow处理图像1. 读取和显示图像2. 剪裁图像3. 生成缩略图4. 缩放和黏贴图像5. 旋转和翻转6. 操作像素7. 滤镜效果使用P

入门了解1.颜色

如果你有使用颜料画画的经历,那么一定知道混合红、黄、蓝三种颜料可以得到其他的颜色,事实上这三种颜色就是美术中的三原色,它们是不能再分解的基本颜色。在计算机中,我们可以将红、绿、蓝三种色光以不同的比例叠加来组合成其他的颜色,因此这三种颜色就是色光三原色。在计算机系统中,我们通常会将一个颜色表示为一个RGB值或RGBA值(其中的A表示Alpha通道,它决定了透过这个图像的像素,也就是透明度)。

名称RGB值名称RGB值
White(白)(255, 255, 255)Red(红)(255, 0, 0)
Green(绿)(0, 255, 0)Blue(蓝)(0, 0, 255)
Gray(灰)(128, 128, 128)Yellow(黄)(255, 255, 0)
Black(黑)(0, 0, 0)Purple(紫)(128, 0, 128)

入门了解 2. 像素

对于一个由数字序列表示的图像来说,最小的单位就是图像上单一颜色的小方格,这些小方块都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置决定了该图像最终呈现出来的样子,它们是不可分割的单位,我们通常称之为像素(pixel)。每一个图像都包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小,大家如果爱好拍照或者自拍,对像素这个词就不会陌生。

用Pillow处理图像

Pillow是由从著名的python图像处理库PIL发展出来的一个分支,通过Pillow可以实现图像压缩和图像处理等各种操作。可以使用下面的命令来安装Pillow。

pip install pillow

Pillow中最为重要的是Image类,可以通过Image模块的open函数来读取图像并获得Image类型的对象。

1. 读取和显示图像

   from PIL import Image

   # 读取图像获得Image对象
   image = Image.open('guido.jpg')
   # 通过Image对象的fORMat属性获得图像的格式
   print(image.format) # JPEG
   # 通过Image对象的size属性获得图像的尺寸
   print(image.size)   # (500, 750)
   # 通过Image对象的mode属性获取图像的模式
   print(image.mode)   # RGB
   # 通过Image对象的show方法显示图像
   image.show()

2. 剪裁图像

   # 通过Image对象的crop方法指定剪裁区域剪裁图像
   image.crop((80, 20, 310, 360)).show()

3. 生成缩略图

   # 通过Image对象的thumbnail方法生成指定尺寸的缩略图
   image.thumbnail((128, 128))
   image.show()

4. 缩放和黏贴图像

   # 读取骆昊的照片获得Image对象
   luohao_image = Image.open('luohao.png')
   # 读取吉多的照片获得Image对象
   guido_image = Image.open('guido.jpg')
   # 从吉多的照片上剪裁出吉多的头
   guido_head = guido_image.crop((80, 20, 310, 360))
   width, height = guido_head.size
   # 使用Image对象的resize方法修改图像的尺寸
   # 使用Image对象的paste方法将吉多的头粘贴到骆昊的照片上
   luohao_image.paste(guido_head.resize((int(width / 1.5), int(height / 1.5))), (172, 40))
   luohao_image.show()

5. 旋转和翻转

   image = Image.open('guido.jpg')
   # 使用Image对象的rotate方法实现图像的旋转
   image.rotate(45).show()
   # 使用Image对象的transpose方法实现图像翻转
   # Image.FLIP_LEFT_RIGHT - 水平翻转
   # Image.FLIP_TOP_BOTTOM - 垂直翻转
   image.transpose(Image.FLIP_TOP_BOTTOM).show()

6. 操作像素

   for x in range(80, 310):
       for y in range(20, 360):
           # 通过Image对象的putpixel方法修改图像指定像素点
           image.putpixel((x, y), (128, 128, 128))
   image.show()

7. 滤镜效果

   from PIL import ImageFilter

​​​​​​​   # 使用Image对象的filter方法对图像进行滤镜处理
   # ImageFilter模块包含了诸多预设的滤镜也可以自定义滤镜
   image.filter(ImageFilter.CONTOUR).show()

使用Pillow绘图

Pillow中有一个名为ImageDraw的模块,该模块的Draw函数会返回一个ImageDraw对象,通过ImageDraw对象的arc、line、rectangle、ellipse、polyGon等方法,可以在图像上绘制出圆弧、线条、矩形、椭圆、多边形等形状,也可以通过该对象的text方法在图像上添加文字。

完整的代码如下所示。

import random

from PIL import Image, ImageDraw, ImageFont


def random_color():
    """生成随机颜色"""
    red = random.randint(0, 255)
    green = random.randint(0, 255)
    blue = random.randint(0, 255)
    return red, green, blue


width, height = 800, 600
# 创建一个800*600的图像,背景色为白色
image = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
# 创建一个ImageDraw对象
drawer = ImageDraw.Draw(image)
# 通过指定字体和大小获得ImageFont对象
font = ImageFont.truetype('Kongxin.ttf', 32)
# 通过ImageDraw对象的text方法绘制文字
drawer.text((300, 50), 'Hello, world!', fill=(255, 0, 0), font=font)
# 通过ImageDraw对象的line方法绘制两条对角直线
drawer.line((0, 0, width, height), fill=(0, 0, 255), width=2)
drawer.line((width, 0, 0, height), fill=(0, 0, 255), width=2)
xy = width // 2 - 60, height // 2 - 60, width // 2 + 60, height // 2 + 60
# 通过ImageDraw对象的rectangle方法绘制矩形
drawer.rectangle(xy, outline=(255, 0, 0), width=2)
# 通过ImageDraw对象的ellipse方法绘制椭圆
for i in range(4):
    left, top, right, bottom = 150 + i * 120, 220, 310 + i * 120, 380
    drawer.ellipse((left, top, right, bottom), outline=random_color(), width=8)
# 显示图像
image.show()
# 保存图像
image.save('result.png')

注意:上面代码中使用的字体文件需要根据自己准备,可以选择自己喜欢的字体文件并放置在代码目录下。

总结

使用Python语言做开发,除了可以用Pillow来处理图像外,还可以使用更为强大的OpenCV库来完成图形图像的处理,OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,可以用来开发实时图像处理、计算机视觉和模式识别程序。在我们的日常工作中,有很多繁琐乏味的任务其实都可以通过Python程序来处理,编程的目的就是让计算机帮助我们解决问题,减少重复乏味的劳动。

以上就是Python实现图像压缩和图像处理详解的详细内容,更多关于Python图像压缩的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python实现图像压缩和图像处理详解

本文链接: https://www.lsjlt.com/news/119201.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现图像压缩和图像处理详解
    目录入门了解1.颜色入门了解 2. 像素用Pillow处理图像1. 读取和显示图像2. 剪裁图像3. 生成缩略图4. 缩放和黏贴图像5. 旋转和翻转6. 操作像素7. 滤镜效果使用P...
    99+
    2022-11-11
  • Python图像处理之图像量化处理详解
    目录一.图像量化处理原理二.图像量化实现三.图像量化等级对比四.K-Means聚类实现量化处理五.总结一.图像量化处理原理 量化(Quantization)旨在将图像像素点对应亮度的...
    99+
    2022-11-13
  • python数字图像处理实现图像的形变与缩放
    目录skimage的transform模块1、改变图片尺寸resize2、按比例缩放rescale3、旋转 rotate4、图像金字塔skimage的transform模块 图像的形...
    99+
    2022-11-11
  • Python图像处理之图像金字塔详解
    目录一.图像金字塔原理二.图像向上取样三.图像向下取样四.总结一.图像金字塔原理 上一篇文章讲解的图像采样处理可以降低图像的大小,本文将补充图像金字塔知识,了解专门用于图像向上采样和...
    99+
    2022-11-13
  • Python NumPy灰度图像的压缩原理讲解
    灰度图像是对图像的颜色进行变换,如果要对图像进行压缩该怎么处理呢? 1、矩阵运算中有一个概念叫做奇异值和特征值。 设A为n阶矩阵,若存在常数λ及n维非零向量x,使得Ax=λx,则称λ是矩阵A的特征值,x是A属于特征值...
    99+
    2022-06-02
    Python NumPy 图像压缩
  • JavaScript实现图像压缩的方法
    目录一、简单压缩二、使用canvas 将base64 图像压缩到指定文件大小以内1、 方法一2.、方法二三、使用 canvas 和 web workers 来实现图像压缩J...
    99+
    2023-01-11
    js 图像压缩 canvas web workers 图像压缩 js canvas压缩
  • python数字图像处理图像的绘制详解
    目录正文一、用figure函数和subplot函数分别创建主窗口与子图二、用subplots来创建显示窗口与划分子图三、其它方法绘图并显示正文 实际上前面我们就已经用到了图像的绘制,...
    99+
    2022-11-11
  • Python图像处理之图像增广算法详解
    目录前言图像增广算法a.图像旋转b.图像亮度调整c.图像裁剪及拼接本章小结前言 图像增广算法在计算机视觉领域扮演着至关重要的角色。随着深度学习的兴起,大规模数据集的需求变得更加迫切,...
    99+
    2023-05-20
    Python图像增广算法 Python图像处理 Python 算法
  • Python图像运算之图像阈值化处理详解
    目录一.图像阈值化二.固定阈值化处理1.二进制阈值化2.反二进制阈值化3.截断阈值化4.阈值化为05.反阈值化为0三.自适应阈值化处理四.总结一.图像阈值化 图像阈值化(Binari...
    99+
    2022-11-10
  • OpenCV图像处理之图像拼接详解
    目录图像拼接技术一、需求分析二、具体步骤三、代码实现图像拼接技术 一、需求分析 将下面两张图像进行拼接 拼接得到一张完整的图像 二、具体步骤 1.选择特征点 //1、选...
    99+
    2022-11-13
    OpenCV 图像处理 图像拼接 OpenCV 图像拼接 OpenCV 图像处理
  • 玩转Python图像处理之二值图像腐蚀详解
    目录1 引言2 腐蚀概念3 举个栗子4 水平腐蚀4.1 理论基础4.2 代码实现5 垂直腐蚀5.1 理论基础5.2 代码实现6 全方向腐蚀6.1 理论基础6.2 代码实现7 总结1 ...
    99+
    2022-11-12
  • opencv-python基本图像处理详解
    目录一、使用matplotlib显示图1、显示热量图 2、显示灰度图二、使用cv.imread显示图像1、显示灰度图像总结一、使用matplotlib显示图 impor...
    99+
    2022-11-12
  • Python图像处理之图像算术与逻辑运算详解
    目录一.图像加法运算二.图像减法运算三.图像与运算四.图像或运算五.图像非运算六.图像异或运算七.总结一.图像加法运算 图像加法运算主要有两种方法。第一种是调用Numpy库实现,目标...
    99+
    2022-11-13
  • PythonOpenCV图像处理之图像滤波特效详解
    目录1 分类2 邻域滤波2.1 线性滤波2.2 非线性滤波3 频域滤波3.1 低通滤波3.2 高通滤波1 分类 图像滤波按图像域可分为两种类型: 邻域滤波(Spatial Domai...
    99+
    2022-11-13
  • java 实现图片像素质量压缩与图片长宽缩放
    目录java 图片像素质量压缩与图片长宽缩放java 修改图片dpi(像素/大小)java 图片像素质量压缩与图片长宽缩放 今天找到的这个方法比以前项目用到的方法更好,这里记录下,方...
    99+
    2022-11-12
  • Python图像处理之图像融合与ROI区域绘制详解
    目录一.图像融合二.图像ROI区域定位三.图像属性(1)shape(2)size(3)dtype四.图像通道分离及合并(1)split()函数(2)merge()函数五.图像类型转换...
    99+
    2022-11-13
  • python数字图像处理之图像简单滤波实现
    目录引言1、sobel算子2、roberts算子3、scharr算子4、prewitt算子5、canny算子6、gabor滤波7、gaussian滤波8、median9、水平、垂直边...
    99+
    2022-11-11
  • Python数字图像处理基础直方图详解
    目录直方图的定义直方图的性质直方图的应用图像增强图像分割图像识别Python直方图的计算直方图的定义 直方图的性质 只统计某个灰度级出现的次数,图像的大小不一样的话, 某灰度值...
    99+
    2022-11-12
  • Python图像运算之图像点运算与灰度化处理详解
    目录一.图像点运算概念二.图像灰度化处理三.基于像素操作的图像灰度化处理1.最大值灰度处理方法2.平均灰度处理方法3.加权平均灰度处理方法四.总结一.图像点运算概念 图像点运算(Po...
    99+
    2022-11-13
  • Python 图像处理 Pillow 库详情
    前言: 图像处理是常用的技术,python 拥有丰富的第三方扩展库,Pillow 是 Python3 最常用的图像处理库,目前最高版本5.2.0。Python2 使用Pil库,两者是...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作