当前位置: 首页 > news >正文

pillow学习4

ImageChops 模块
在 Pillow 库的内置模块 ImageChops 中包含了多个用于实现图片合成的函数。这些合成
功能是通过计算通道中像素值的方式来实现的。其主要用于制作特效、合成图片等操作。
常用的内置函数如下所示:
(1)相加函数 add(),功能是对两张图片进行算术加法运算。具体语法如下所示:

ImageChops.add(image1,image2,scale = 1.0,offset = 0

(2)减法函数 subtract(),功能是对两张图片进行算术减法运算。具体语法如下所示:

ImageChops.subtract(image1,image2,scale = 1.0,offset = 0
from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#对两张图片进行减法运算
ImageChops.subtract(imga,imgb,1,0).show()

变暗函数 darker()
功能是比较两个图片的像素,取两张图片中对应像素的较小值,所
以合成时两幅图像中对应位置的暗部分得到保留,而去除亮部分。具体语法如下所示:

ImageChops.darker(image1,image2 )
from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#使用变暗函数 darker()
ImageChops.darker(imga,imgb).show()

变亮函数 lighter()
与变暗函数 darker()相反,功能是比较两个图片(逐像素比较,返回一幅新的图片,这幅新的图片是将两张图片中较亮的部分叠加得到的。也就是说,在某
一点上,两张图中哪个的值大(亮)则取之。具体语法如下所示

from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#使用变亮函数 lighter()
ImageChops.lighter(imga,imgb).show()

叠加函数 multiply(),功能是将两张图片互相叠加。如果用纯黑色与某图片进行叠加操
作,就会得到一幅纯黑色的图片。如果用纯白色与图片作叠加,则图片不受影响。具体语法

from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#将两张图片相互叠加
ImageChops.multiply(imga,imgb).show()
out = image1 * image2 / MAX

屏幕函数 screen(),功能是先反色后叠加,实现合成图像的效果,就像将两张幻灯片用
两台投影机同时投影到一个屏幕上的效果。具体语法如下所示:

from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#实现反色后叠加
# ImageChops.screen(imga,imgb).show()

反色函数 invert(),类似于集合操作中的求补集,最大值为 Max,每个像素做减法,取
出反色。在反色时将用 255 减去一幅图像的每个像素值,从而得到原来图像的反相。也就是
说,其表现为“底片”性质的图像。具体语法如下所示:

from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#使用反色函数 invert()
ImageChops.invert(imga).show()

比较函数 difference(),可以逐像素做减法操作,计算出绝对值。函数 difference()能够
两幅图像的对应像素值相减后的图像,对应像素值相同的,则为黑色。函数 difference()通常
用来找出图像之间的差异。具体语法如下所示:

from PIL import Image
from PIL import ImageChops
#打开图片
imga=Image.open('blend1.jpg')
imgb=Image.open('blend2.jpg')
#使用比较函数 difference()
ImageChops.difference(imga,imgb).show()
out = abs(image1 - image2)

相关文章:

pillow学习4

ImageChops 模块 在 Pillow 库的内置模块 ImageChops 中包含了多个用于实现图片合成的函数。这些合成 功能是通过计算通道中像素值的方式来实现的。其主要用于制作特效、合成图片等操作。 常用的内置函数如下所示: (1)相加函数 add()&#xf…...

外企如何有效面对日益严格的跨境数据传输法律?

在当今这个数据驱动的时代,随着全球化步伐的加快,企业跨国界的数据交流已成为常态。但随之而来的,是各国政府对跨境数据传输日益严格的规定和监管,这让众多外资企业(简称“外企”)在享受全球市场红利的同时…...

运维开发.MySQL.范式与反范式化

运维开发 MySQL.三大范式 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/artic…...

HCIA-HarmonyOS Application Developer 课程大纲

一:鸿蒙 Mac 版、 Windows 版【编辑器】和【模拟器】 & 鸿蒙基础环境搭建 - ( 3 课时) - Mac arm 版开发环境搭建:Mac arm 版模拟器安装及配置;安装 DevEcoStudioPreview 版本; - Windows 版开发…...

如何用Java实现SpringCloud Alibaba Sentinel的熔断功能?

在Java中使用Spring Cloud Alibaba Sentinel实现熔断功能的步骤如下&#xff1a; 添加依赖 在项目的pom.xml文件中添加Spring Cloud Alibaba Sentinel的依赖&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud…...

Day27

Day27 反射案例 案例一&#xff1a;万能数组扩容 注意&#xff1a;copyOf、toString public class Test01 {/*** 知识点&#xff1a;反射案例 之 万能数组扩容* * 注意&#xff1a;copyOf、toString*/public static void main(String[] args) {String[] ss {"aaa"…...

uni-app App端实现文字语音播报(Ba-TTS)

前言 最近在遇到消息提示语音播放出来&#xff0c;查了一圈文档发现并没有自带api 后面想起支付宝收钱播报&#xff0c;不受限与系统环境和版本环境&#xff08;后面查阅他是音频实现的&#xff09; 如果是由安卓端需要语音播放功能-直接使用Ba-TTs救急&#xff08;需要付费2…...

在WHM中如何调整max_upload_size 参数大小

今日我们在搭建新网站时需要调整一下PHP参数max_upload_size 的大小&#xff0c;我们公司使用的Hostease的美国独立服务器产品默认5个IP地址&#xff0c;也购买了cPanel面板&#xff0c;因此联系Hostease的技术支持&#xff0c;寻求帮助了解到如何在WHM中调整PHP参数&#xff0…...

docker system prune命令详解

docker system prune 是 Docker 中的一个命令&#xff0c;用于清理 Docker 系统中的未使用资源&#xff0c;以帮助回收磁盘空间。这个命令执行一系列操作来删除不再需要的项目&#xff0c;具体包括&#xff1a; 删除所有已停止的容器。删除所有未被任何容器引用的网络&#xf…...

使用jdk自带jhat工具排查OOM问题

使用jdk自带jhat工具排查OOM问题 OOM java.lang.OutOfMemoryError: Java heap space排查步骤 编写一个测试类 public class TestJVM {Testpublic void test1() throws InstantiationException, IllegalAccessException {List<A> list new ArrayList<>();for (i…...

独孤思维:付费就是割韭菜,千万别上当

01 很多人觉得付费是坑&#xff0c;是割韭菜。 其实大多数情况&#xff0c;你所付费的&#xff0c;是购买了别人的经验。 让你能够少走很多弯路&#xff0c;让你能够节约大量时间和精力&#xff0c;购买别人的成功路径。 打一个粗俗的比方。 很多人都说&#xff0c;买的资料&am…...

【PB案例学习笔记】-12秒表实现

写在前面 这是PB案例学习笔记系列文章的第11篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…...

Linux驱动开发笔记(二) 基于字符设备驱动的GPIO操作

文章目录 前言一、设备驱动的作用与本质1. 驱动的作用2. 有无操作系统的区别 二、内存管理单元MMU三、相关函数1. ioremap( )2. iounmap( )3. class_create( )4. class_destroy( ) 四、GPIO的基本知识1. GPIO的寄存器进行读写操作流程2. 引脚复用2. 定义GPIO寄存器物理地址 五、…...

【ESP32之旅】ESP32 PlatformIO 固件单独烧录

背景 有时候使用PIO编写的代码需要发给客户去验证&#xff0c;相比较于发送源码直接发送bin文件&#xff0c;更加的安全而且高效。不用担心源码的泄漏&#xff0c;也不用帮客户配置PIO环境。 操作方法 1.编译 首先进行代码编译&#xff0c;如编译成功会在 .pio\build\airm2…...

视频监控业务平台LntonCVS运用国标协议对接视频汇聚管理综合平台应用方案

为了实现“以信息化推动应急管理能力现代化”的目标&#xff0c;应急管理部提出了加速现代信息技术与应急管理业务深度融合的计划。这一计划是国家加强和改进应急管理工作的关键举措&#xff0c;也是满足日益严峻的应急管理形势和人民群众不断增长的公共安全需求的紧迫需求。 为…...

【Linux 网络编程】协议的分层知识!

文章目录 1. 计算机网络背景2. 认识 "协议"3. 协议分层 1. 计算机网络背景 网络互联: 多台计算机连接在一起, 完成数据共享; &#x1f34e;局域网&#xff08;LAN----Local Area Network&#xff09;: 计算机数量更多了, 通过交换机和路由器连接。 &#x1f34e; 广…...

Firefox国际版

Firefox国际版官方网址&#xff1a; Download the Firefox Browser in English (US) and more than 90 other languagesEveryone deserves access to the internet — your language should never be a barrier. That’s why — with the help of dedicated volunteers around…...

封装和解构是 Python 中常用的技术

目录 前言 一、封装&#xff08;Packing&#xff09;&#xff1a; 二、解构&#xff08;Unpacking&#xff09;&#xff1a; 2.1 解构元组或列表&#xff1a; 2.2 解构字典&#xff1a; 2.3 使用*进行解构&#xff1a; 2.4 解构函数返回值 总结 前言 提示&#xff1a;这…...

理解OAuth:服务间的授权机制

理解OAuth:服务间的授权机制 好的,让我来教你一下关于这个奇怪的东西。 在不同的项目中,认证有很多不同的方式。但在我们深入探讨它的使用方式之前,让我们先来看看它最初的用途。 首先,我们可以从名称中得到一些线索。“auth”这个词与什么有关呢?问题是,这里的“aut…...

JRT性能演示

演示视频 君生我未生&#xff0c;我生君已老&#xff0c;这里是java信创频道JRT&#xff0c;真信创-不糊弄。 基础架构决定上层建筑&#xff0c;和给有些品种的植物种植一样&#xff0c;品种不对&#xff0c;施肥浇水再多&#xff0c;也是不可能长成参天大树的。JRT吸收了各方…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...