【深度学习实验】图像处理(一):Python Imaging Library(PIL)库:图像读取、写入、复制、粘贴、几何变换、图像增强、图像滤波

news2024/11/15 23:57:07

文章目录

  • 一、实验介绍
  • 二、实验环境
    • 1. 配置虚拟环境
    • 2. 库版本介绍
  • 三、实验内容
    • 0. 安装 PIL 库
    • 1. 图像读取和写入
      • a. 图像读取
      • b. 图像写入
      • c. 构建新图像
    • 2. 图像复制粘贴
      • a. 图像复制
      • b. 图像局部复制
      • c. 图像粘贴
    • 3. 几何变换
      • a. 图像调整大小
      • b. 图像旋转
      • c. 图像翻转
    • 4. 图像增强
      • a. 图像亮度增强
      • b. 图像颜色增强
      • c. 图像对比度增强
      • d. 图像锐度增强
    • 5. 图像滤波
      • a. 图像滤波 - 浮雕
      • b. 图像滤波 - 轮廓

一、实验介绍

  图像处理在深度学习领域中起到了至关重要的作用,Python Imaging Library(PIL)作为一种主流的图像处理库,为图像的读取、处理和增强提供了丰富的功能。

  本实验将介绍 PIL 的基本用法,主要包括图像读取、写入、复制、粘贴、几何变换以及图像增强、图像滤波等方面。

Pillow v2.4.0 (PIL fork)

二、实验环境

  本系列实验使用了PyTorch深度学习框架,相关操作如下:

1. 配置虚拟环境

conda create -n DL python=3.7 
conda activate DL
pip install torch==1.8.1+cu102 torchvision==0.9.1+cu102 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
conda install matplotlib
 conda install scikit-learn

2. 库版本介绍

软件包本实验版本目前最新版
matplotlib3.5.33.8.0
numpy1.21.61.26.0
python3.7.16
scikit-learn0.22.11.3.0
torch1.8.1+cu1022.0.1
torchaudio0.8.12.0.2
torchvision0.9.1+cu1020.15.2

三、实验内容

0. 安装 PIL 库

  可以使用以下命令:

pip install pillow

1. 图像读取和写入

  下面,我将介绍如何使用 PIL 的 Image.open 方法读取图像,并使用 display 方法显示图像。展示了如何使用 save 方法将图像保存到设备上、使用 Image.new 构建新的图像。

a. 图像读取

from PIL import Image

# we can use open api to load image data 
img = Image.open('qomolangma.jpg')
print(img.format,img.size)
# show your image
display(img)

在这里插入图片描述

b. 图像写入

import os

# we can utilize save() to write current image to device.
file_name = 'qomolangmah.jpg'
img.save(file_name)
print(os.path.join(os.getcwd(),file_name))

c. 构建新图像

image_new = Image.new('RGB', (50, 50), 'red')
display(image_new)
file_name = 'new.png'
image_new.save(file_name)
print(os.path.join(os.getcwd(), file_name))

在这里插入图片描述

2. 图像复制粘贴

  PIL 提供了灵活的图像复制和粘贴功能,下面我将介绍全局级别和局部级别的图像复制,以及使用 crop 方法进行局部图像复制。此外,还有图像的粘贴和合并操作。

a. 图像复制

img = Image.open('qomolangma.jpg')
img_copy = img.copy()
display(img_copy)

b. 图像局部复制

rect = (0, 0, 100, 100)
img_copy_local = img.crop(rect)
display(img_copy_local)

在这里插入图片描述

c. 图像粘贴

img_new = Image.open('new.png')
box = (10, 10, 60, 60)
img.paste(img_new, box)
display(img)

在这里插入图片描述

3. 几何变换

  图像的几何变换是图像处理中的重要任务之一,下面我将详细介绍图像的调整大小、旋转和翻转操作。

a. 图像调整大小

img = Image.open('qomolangma.jpg')
print(img.size)
img_resize = img.resize((512, 224))
print(img_resize.size)

b. 图像旋转

img_rotate = img.rotate(45)
display(img_rotate)

在这里插入图片描述
或使用:

img_rotate = img.transpose(Image.ROTATE_90)
img_rotate = img.transpose(Image.ROTATE_180)
img_rotate = img.transpose(Image.ROTATE_270)
display(img_rotate)

c. 图像翻转

img_flip = img.transpose(Image.FLIP_LEFT_RIGHT)
display(img_flip)

在这里插入图片描述

4. 图像增强

  PIL 提供了 ImageEnhanceImageFilter等 模块,用于图像的亮度、颜色、对比度和锐度的增强。下面,我将通过示例演示如何使用这些模块进行图像增强。

a. 图像亮度增强

from PIL import ImageEnhance

img = Image.open('qomolangma.jpg')
img_bri = ImageEnhance.Brightness(img)
img_bri_enh = img_bri.enhance(factor=0.5) # factor is from 0 to 1. 
display(img_bri_enh)

在这里插入图片描述

b. 图像颜色增强

img_col = ImageEnhance.Color(img)
img_col_enh = img_col.enhance(factor=1.5)  # factor is from 0 to postive infinity
display(img_col_enh)

在这里插入图片描述

c. 图像对比度增强

img_con = ImageEnhance.Contrast(img)
img_con_enh = img_con.enhance(factor=1.5)  # factor is from 0 to postive infinity
display(img_con_enh)

在这里插入图片描述

d. 图像锐度增强

img_sha = ImageEnhance.Sharpness(img)
img_sha_enh = img_sha.enhance(factor=1.5)  # factor is from 0 to 2
display(img_sha_enh)

在这里插入图片描述

5. 图像滤波

  PIL 的 ImageFilter 模块提供了多种滤波操作,如浮雕(EMBOSS)和轮廓(CONTOUR)等。

a. 图像滤波 - 浮雕

from PIL.ImageFilter import EMBOSS, CONTOUR

img_1 = img.filter(EMBOSS)
display(img_1)

在这里插入图片描述

b. 图像滤波 - 轮廓

img_2 = img.filter(CONTOUR)
display(img_2)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QGIS之二十五两个面图层数据中选择图形完全一致的数据

效果 步骤 1、准备数据 2、按位置选择 在Qgis工具箱中搜索"按位置选择"工具 选择要素和比较要素根据实际选择 运行 3、结果

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-3:任务切换)

学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。 注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

WorkPlus解放企业应用开发,实现跨平台无缝切换

在移动应用的快速发展时代,企业对于自主开发和应用平台替换的需求日益增长。WorkPlus作为一个完整的移动数字化APP底座,为企业提供了独立自主的应用开发环境,实现了平台无关性和应用解耦。今天,我们将深入探讨WorkPlus在企业应用开…

基于 Flink SQL 和 Paimon 构建流式湖仓新方案

本文整理自阿里云智能开源表存储负责人,Founder of Paimon,Flink PMC 成员李劲松在云栖大会开源大数据专场的分享。本篇内容主要分为四部分: 数据分析架构演进介绍 Apache PaimonFlink Paimon 流式湖仓流式湖仓Demo演示 数据分析架构演进 …

【C语言:深入理解指针二】

文章目录 1. 二级指针2. 指针数组3. 字符指针变量4. 数组指针变量5. 二维数组传参的本质6. 函数指针变量7. 函数指针数组8. 转移表9. 回调函数10. qsort函数的使用与模拟实现 1. 二级指针 我们知道,指针变量也是变量,它也有自己的地址,使用什…

TypeError: Cannot read property ‘sendpost‘ of undefined

箭头函数指向问题,定义let that this 解决

【外贸商机篇】黑色星期五来啦,跨境电商必备手册!

黑色星期五是每年11月的第四个星期五,三天后是网络星期一。这两个购物日是美国一年中最繁忙的购物日之一,仅在2021年的感恩节周末,电子商务收入估计就达到196亿美元。 在一项Statista调查中,美国消费者被问及他们计划购买哪些商品…

自由飞翔之小鸟

一、创建文件、包、类、插入图片文件 二、app包 1、Gameapp类(运行游戏) package app;import main.GameFrame;public class Gameapp {public static void main(String[] args) {//游戏的入口new GameFrame();} } 三、main包 1、Barrier(障…

Python基础:生成器(Generators)和生成器表达式(Generator Expressions)详解

生成器(Generators)和 生成器表达式(Generator Expressions)是 Python 中用于处理迭代器和序列数据的强大工具。它们允许你按需生成值,而不是一次性生成所有值,从而节省内存和提高性能。 1. 生成器&#x…

前缀和——724. 寻找数组的中心下标

文章目录 🍓1. 题目🫒2. 算法原理🦄解法一:暴力枚举🦄解法二:前缀和 🥔3. 代码实现 🍓1. 题目 题目链接:724. 寻找数组的中心下标 - 力扣(LeetCode&#xff0…

【一文搞定】在Docker中搭建centos7远程桌面环境(Xfce、Gnome两种方式)

目录 前言一、基于GNOME构建远程桌面二、基于Xfce构建远程桌面(轻量级) 前言 本文提供两种安装方式,均自己测试过,最后还是选择了Xfce,因为它比较轻量级,占用资源较少。大家也可以都试试,比较感…

idea 26 个天花板技巧

1、 查看代码历史版本;2、 调整idea的虚拟内存:;3、 idea设置成eclipse的快捷键;4、 设置提示词忽略大小写;5、 关闭代码检查;6、 设置文档注释模板;7、 显示方法分隔符;8、 设置多行…

【大神支招】3步,打造一张BI报表

随着BI报表的高效直观、灵活分析的特点越来越被大家所熟知,很多BI零基础的用户可积极尝试制作BI报表,以达到灵活自助分析、高效智能分析的效果。那么BI报表零基础的小白们该怎么做BI报表,才能又快又好地做出来? 大神支招&#xf…

Authing 入选《 2023 年央国企信创应用与实践研究报告》优秀服务商

11 月 21 日,Authing 身份云作为国内唯一事件驱动云原生身份平台入选《 2023 年央国企信创应用与实践研究报告》优秀服务商,该报告由第一新声研究院合伙人、Gartner 前高管合伙人/副总裁李长华牵头指导,第一新声创始人兼 CEO 组织&#xff0c…

畅捷通T6 客户端登录提示 运行时错误 372 加载控件cfloatmenu失败

客户单win10电脑, T6版本是 V7.1 不知道操作了什么每个电脑提示 运行时错误372: 从加载控件CFloatMenu失败。您的版本可能已过期。确认您使用的控件版本是同您的应用程序一起提供的。 ******* 解决办法: 找个其他电脑复制mscomctl.ocx 到操作系统目录里面注册一下,即可. …

蓝桥杯物联网竞赛_STM32L071_2_继电器控制

CubeMX配置: Function.c及Function.h: #include "Function.h" #include "gpio.h" void Function_LD5_ON(void){HAL_GPIO_WritePin(LD5_GPIO_Port, LD5_Pin, GPIO_PIN_RESET); }void Function_LD5_OFF(void){HAL_GPIO_WritePin(LD5_…

【Unity】 UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

1. 什么是PhysicsRaycaster组件? PhysicsRaycaster是Unity UGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。 2. PhysicsRaycaster的工作原理 PhysicsRaycast…

便携式心电图机方案_基于MT6735平台的手持心电图机

便携式心电图机具备体积小、易携带、兼容12导模式的特点,通过工频滤波、基线滤波和肌电滤波等处理,能够获得更精准的心电图谱。该设备可以与医院信息系统(HIS)相连接,实现患者信息的共享。采集的心电数据可以通过无线方式发送到心电判读平台&…

Python函数式编程:让你的代码更优雅更简洁

概要 函数式编程(Functional Programming)是一种编程范式,它将计算视为函数的求值,并且避免使用可变状态和循环。 函数式编程强调的是函数的计算,而不是它的副作用。 在函数式编程中,函数是第一类公民&a…

postgresql数据库中update使用的坑

简介 在数据库中进行增删改查比较常见,经常会用到update的使用。但是在近期发现update在oracle和postgresql使用却有一些隐形区别,oracle 在执行update语句的时候set 后面必须跟着1对1的数据关联而postgresql数据库却可以一对多,这就导致数据…