Python Pilow 颜色空间转换、图像滤镜应用、像素级操作、图像组合

news/2025/2/12 5:28:46/

在Python的Pillow库中,颜色空间转换、图像滤镜应用和像素级操作是常见的图像处理功能。

下面是一些示例代码来演示这些操作:

颜色空间转换

Pillow允许将图片从一种颜色空间转换为另一种颜色空间,例如将RGB转换为灰度或HSV。

from PIL import Image# 打开RGB图像
img_rgb = Image.open('example.jpg').convert('RGB')# 将图像转换为灰度(L)模式
img_gray = img_rgb.convert('L')# 或者转换到HSV颜色空间
img_hsv = img_rgb.convert('HSV')

图像滤镜应用

Pillow提供了ImageFilter模块,包含了一系列预定义的滤镜效果,如模糊、锐化等。

from PIL import ImageFilter# 应用模糊滤镜
img_blur = img_rgb.filter(ImageFilter.BLUR)# 应用锐化滤镜
img_sharp = img_rgb.filter(ImageFilter.SHARPEN)

像素级操作

对于像素级别的操作,可以直接访问每个像素并进行修改。

# 以逐像素的方式遍历图像
for x in range(img_rgb.width):for y in range(img_rgb.height):# 获取当前像素 RGB 值pixel = img_rgb.getpixel((x, y))# 对像素值进行某种操作,例如反转颜色inverted_pixel = [255 - p for p in pixel]# 将新的像素值设置回原位置img_rgb.putpixel((x, y), tuple(inverted_pixel))# 保存处理后的图像
img_rgb.save('modified_example.jpg', 'JPEG')

图像组合

两个图像叠加在一起:

from PIL import Image# 打开两个图像文件
image1 = Image.open('image1.jpg')
image2 = Image.open('image2.png')# 获取一个图像的尺寸作为新图的尺寸
new_image_size = image1.size  # 假设我们以第一个图像的大小为准# 创建一个新的空白画布
new_image = Image.new('RGB', new_image_size, (255, 255, 255))  # 白色背景# 计算要粘贴的位置
paste_position_1 = (0, 0)  # 第一个图像放在左上角
paste_position_2 = (image1.width // 2, image1.height // 2)  # 第二个图像放在中心# 将图像粘贴到新画布上
new_image.paste(image1, paste_position_1)
new_image.paste(image2, paste_position_2)# 保存最终的组合图像
new_image.save('combined_image.jpg', 'JPEG')# 另外,如果需要对图像进行缩放或裁剪以便适应新的布局,可以使用resize或crop方法:
# image2_resized = image2.resize((new_width, new_height))
# 然后将调整后的image2_resized粘贴到合适的位置。

上述代码是基于两个图像直接叠加的例子。实际应用中,您可能还需要根据具体需求调整图像的透明度、旋转角度或其他图像处理操作。同时,若两张图片大小不一致,可能需要预先通过resize()或者按需裁剪(crop())以适应目标位置的尺寸要求。

以上只是基础示例,实际使用时可以根据需求定制更复杂的图像处理逻辑。


http://www.ppmy.cn/news/1290731.html

相关文章

工智能基础知识总结--什么是GBDT

什么是GBDT Boosting思想 Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。 Bagging与Boosting的…

leetcode-两数之和

题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺…

Vue3.0-watch侦测器

一、用处 计算属性允许我们声明性的计算衍生值,然而在某些情况下,我们需要在状态变化的时候执行一些副作用,例如更改DOM,或者根据异步操作去修改另一处的状态。 二、侦听数据源类型 watch的第一个参数可以是不同形式的"数据…

Idea启动运行“错误:java: 无效的源发行版: 13”,如何解决?

以上是以JDK1.8的项目作为举例,如果您用的是其他版本请选择对应的language level idea中项目的language level的含义 language level指的是编译项目代码所用的jdk版本。那么,从这个定义出发会有两个小问题。 ❶ 如果project sdk是jdk8,那么la…

计算机毕业论文内容参考|基于智能搜索引擎的图书管理系统的设计与实现

文章目录 摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望摘要 本文介绍了基于智能搜索引擎的图书管理系统的设计与实现。该系统旨在提供一个高效、智能化的图书管理平台,帮助用户更快、更准确地找到所需的图书资…

人脸关键点检测dlib安装

dlib 库是一个用来人脸关键点检测的 python 库,但因为其是 C 编写(或需要 C编译?),使得我们在安装时遇到各种各样问题。笔者在不同电脑上安装遇到的问题都不同,但最后经过搜索,都解决了&#xf…

zlib.decompressFile报错 【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:方案1方案2此Bug解决方案总结寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了zlib.decompressFile报错 的问题。 问题: zlib.decompressFile报错,怎么解…