【Python】高效图像处理库:pyvips

news2024/12/22 18:07:16

月亮慢慢变圆,日子慢慢变甜。

在这里插入图片描述

在图像处理领域,pyvips 是一个轻量级且高效的库,适合处理大规模图像、实现高性能的操作。相较于其他常见的图像处理库如 PIL 或 OpenCV,pyvips 以其低内存占用和出色的速度脱颖而出。本文将介绍 pyvips 的基本功能及其优势,并提供一些基础示例代码,帮助你在项目中快速上手。

华丽的分割线

⭕️宇宙起点

    • ❓ 为什么选择 pyvips?
    • 📦 安装 pyvips
    • 💯 基本用法示例
      • 1. 加载和保存图像
      • 2. 图像缩放和裁剪
      • 3. 图像滤镜与转换
      • 4. 图像拼接
    • 🥇 Pyvips 的性能优势
    • 📥 下载地址
    • 💬 结语
    • 📒 参考文献


标题1

❓ 为什么选择 pyvips?

pyvips 是基于 libvips 的 Python 绑定库,而 libvips 是一个高效的 C 库,专为处理大尺寸图像设计。与其他图像库相比,pyvips 有一些明显的优势:

  1. 速度快:libvips 是高度优化的,并行处理图像,尤其在处理大图时,它的性能通常比 PIL 和 OpenCV 要好。
  2. 低内存占用:与许多加载整个图像到内存中的库不同,pyvips 通过流式处理图像,内存消耗显著更低。
  3. 多格式支持:pyvips 支持大量的图像格式,如 TIFF、JPEG、PNG、GIF、WebP 等。
  4. 简洁的 API:pyvips 提供了简洁、直观的 API,使得它的使用非常方便。

标题2

📦 安装 pyvips

安装 pyvips 非常简单,你只需要运行以下命令:

pip install pyvips

注意,pyvips 依赖 libvips,因此你可能需要先安装 libvips。对于 Ubuntu,你可以通过以下命令安装:

sudo apt-get install libvips-dev

标题3

💯 基本用法示例

1. 加载和保存图像

首先,看看如何使用 pyvips 加载和保存图像。与其他图像处理库类似,pyvips 可以读取不同格式的图像文件并将它们保存为新的格式。

import pyvips

# 加载图像
image = pyvips.Image.new_from_file('input.jpg')

# 保存为 PNG 格式
image.write_to_file('output.png')

2. 图像缩放和裁剪

pyvips 支持快速的图像缩放和裁剪操作。以下代码演示了如何缩放图像并进行裁剪。

# 缩放图像(倍率 0.5)
scaled_image = image.resize(0.5)

# 裁剪图像,起点(100, 100),裁剪 300x300 区域
cropped_image = scaled_image.crop(100, 100, 300, 300)

# 保存裁剪后的图像
cropped_image.write_to_file('cropped_output.jpg')

3. 图像滤镜与转换

你还可以使用 pyvips 对图像应用各种滤镜或进行颜色空间转换。例如,下面的代码将图像转换为灰度图。

# 转换为灰度图
grayscale_image = image.colourspace('b-w')

# 保存灰度图像
grayscale_image.write_to_file('grayscale_output.jpg')

4. 图像拼接

pyvips 也可以轻松地将多张图像拼接在一起:

image1 = pyvips.Image.new_from_file('image1.jpg')
image2 = pyvips.Image.new_from_file('image2.jpg')

# 水平拼接两张图像
joined_image = image1.join(image2, direction='horizontal')

# 保存拼接结果
joined_image.write_to_file('joined_output.jpg')

标题4

🥇 Pyvips 的性能优势

pyvips 的性能优势尤其体现在处理大图或批量处理图像时。它可以在不加载整个图像到内存中的情况下进行操作,适合需要高效批量处理图像的场景。例如,在医疗影像处理、卫星图像分析、大规模 Web 图像处理等场景中,pyvips 是一个非常强大的工具。

以下是一个简单的性能对比实验:处理一张 5000x5000 分辨率的图像,并将其缩放至 50% 的大小。使用 PIL 和 pyvips 分别执行这一任务,结果如下:

图像库处理时间内存使用
PIL1.2 秒600 MB
pyvips0.3 秒50 MB

可以看到,pyvips 在处理大图像时不仅速度更快,且内存使用也大幅减少。


标题5

📥 下载地址


pyvips 最新版 下载地址


标题6

💬 结语

pyvips 是一个高效的图像处理库,尤其适用于大图像和批量处理场景。它的速度和低内存占用使得它成为了替代传统图像处理库的优秀选择。如果你在处理图像时遇到性能瓶颈,建议尝试将 pyvips 引入到你的工作流程中。


标题7

📒 参考文献

  • pyvips GitHub仓库

希望本文能帮助你更好地理解 pyvips 的强大之处,并为你的项目带来性能提升!


TheEnd


在这里插入图片描述
在这里插入图片描述

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

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

相关文章

2024年全国大学生数学建模竞赛B题生产过程中的决策问题分析

目录 引言 问题 1:抽样检测方案设计 问题 2:生产过程中的决策 决策阶段划分 决策方案 结果 问题 3:多道工序和零配件的决策 生产流程 决策过程 问题 4:基于抽样检测的重新决策 动态调整次品率 结论 引言 在2024年全国…

[Golang] Sync

[Golang] Sync 文章目录 [Golang] Syncsync.WaitGroupsync.Once对比init() sync.Lock互斥锁和读写锁互斥锁读写锁 死锁问题加锁解锁不成对循环等待 sync.Mapsync/atomicatomic和mutex的区别atomic.value sync.Pool如何使用sync.Pool使用场景 Golang中我们一般提倡使用通信来共享…

Java入门,初识Java

Java背景知识 Java是早期美国 sun 公司(Stanford University Network)在1995年推出的一门计算机高级编程语言。Java早期称为Oak(中文翻译为:橡树),后期改名为Java。(因为当时sun公司门口有很多…

MySQL_数据类型简介

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

【计算机网络】TCP 协议——详解三次握手与四次挥手

文章目录 一、引言二、TCP1、TCP 的数据格式2、TCP 的三次握手3、TCP 的四次挥手4、TCP 的全双工通信 三、TCP 的状态转换1、TCP 连接的建立(三次握手)状态2、TCP 连接的终止(四次挥手)状态3、TCP 异常情况 一、引言 TCP与UDP的区…

Linux操作系统文件权限管理

Linux操作系统下文件的权限分为当前用户权限、用户组权限和其他用户权限,然后每一类用户或组又分为读权限(r)、写权限(w)和可执行权限(x)。 如图1,打开任一目录,右键单击文件,在弹出菜单选择“属性”,在弹出的属性选项…

一款强大的吉他乐谱编辑软件GuitarPro 8.2中文解锁版

GuitarPro 8.2中文解锁版是一款强大的吉他乐谱编辑软件,适合新手和专业乐手。它提供详尽教程和实用工具,助力初学者掌握吉他技巧;对于专业乐手,它精准记录音符和节奏,提供丰富编辑功能和音效处理。此外,软件…

【python版】示波器输出的csv文件(时间与电压数据)如何转换为频率与幅值【方法④】

将示波器输出的 CSV 文件中的时间和电压数据转换为频率和幅值数据的过程涉及几个步骤,下面是详细的步骤和相关的计算公式: 1. 导入数据 首先,你需要将 CSV 文件中的时间和电压数据导入到数据分析工具中,比如 Python(…

【网络】TCP/IP 五层网络模型:网络层

最核心的就是 IP 协议,是一个相当复杂的协议 TCP 详细展开讲解,是因为 TCP 确实在开发中非常关键,经常用到,IP 则不同,和普通程序猿联系比较浅。和专门开发网络的程序猿联系比较紧密(开发路由器&#xff0…

深度学习自编码器 - 随机编码器和解码器篇

序言 在深度学习领域,自编码器作为一种无监督学习技术,凭借其强大的特征表示能力,在数据压缩、去噪、异常检测及生成模型等多个方面展现出独特魅力。其中,随机编码器和解码器作为自编码器的一种创新形式,进一步拓宽了…

COTERRORSET—— LLM训练新基准让模型从自身错误中学习

概述 论文地址:https://arxiv.org/pdf/2403.20046.pdf 在最近的研究中,大规模语言模型因其推理能力而备受关注。这些模型在各种任务和应用中取得了令人瞩目的成果,尤其是使用思维链(CoT)提示方法的有效性已得到证实。…

智慧宿舍平台|基于Springboot+vue的智慧宿舍系统(源码+数据库+文档)

智慧宿舍系统 目录 基于Springbootvue的智慧宿舍系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者…

FPGA基本结构和简单原理

前言: FPGA全程为(Field Programmable Gate Array)现场可编程逻辑阵列,以基本的逻辑为主可以实现大多数芯片可以实现的功能,比如说:ASIC芯片等,在半导体领域有着重要的作用。 本文…

3. 轴指令(omron 机器自动化控制器)——>MC_MoveAbsolute

机器自动化控制器——第三章 轴指令 4 MC_MoveAbsolute变量▶输入变量▶输入输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 示例程序1▶参数设定▶动作示例▶梯形图▶结构文本(ST) 示例程序2▶参数设定▶动作示例▶梯形图▶结构文…

【智路】智路OS 应用开发

1 总览 1.1 功能 智路OS的应用基于框架提供的服务数据,实现场景理解、指标计算、V2X核心功能实现,应用包括但不限于: V2X应用场景实现交通事件检测交通流指标计算系统监控路径规划控制 开发者可以基于智路OS框架和数据,实现自…

【CSS in Depth 2 精译_030】5.2 Grid 网格布局中的网格结构剖析(下)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

Python编程 - 线程

目录 前言 一、线程的使用 (一)基础使用 (二)等待线程完成 (三)多个线程 (四)守护线程 (五)线程同步 (六)总结 二、队列对象 …

编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动

找了很多编译博文,都错误。最后找到了正确编译办法: https://zhuanlan.zhihu.com/p/567883165 直接下载编译好的源码及dll文件 https://download.csdn.net/download/quantum7/89760587 安装VS Virsual Studio 2022 Community D:\Program Files\Micr…

Double Write

优质博文:IT-BLOG-CN 一、存在的问题 为什么需要Double Write: InnoDB的PageSize是16kb,其数据校验也是针对这16KB来计算的,将数据写入磁盘是以Page为单位的进行操作的。而计算机硬件和操作系统,写文件是以4KB作为基…

Spark Streaming基础概论

1. 简介 1.1 什么是 Spark Streaming? Spark Streaming 是 Apache Spark 的一个扩展模块,专门用于处理实时数据流。它通过将数据流切分为一系列小批次(微批次)进行处理,使得开发者能够使用与批处理相同的 API 来处理…