Pygame详解(十八):mask 模块

Pygame学习笔记7:精灵冲突及Zombie Mob游戏 上一章我们对于冲突的检测只是使用的pygame的最简单的冲突检测,即只是两个精灵之间的冲突检测,但是pygame支持多种冲突检测技术,因此这一章就来学习一下这些冲突检测技术。 冲突检测技术 两个精灵之间的矩形检测 这个方法在上一章中已经讲过了,就是使用pygame.sprite.collide_rect()方法进行一对一的检测,需要传递两个参数,都是pygame.sprite.Sprite派生出来的对象,具体来讲就是关键要有一个rect的Rect属性可用,实例如下: 对于如下的类: # 类中的X、Y、pos 阅读详情

pygame.mask
Pygame 中处理图形遮罩的模块。

函数
pygame.mask.from_surface()  ——  从指定 Surface 对象中返回一个 Mask
pygame.mask.from_threshold()  ——  从给定阈值的 Surface 对象中创建一个 Mask
类
pygame.mask.Mask  ——   用于表示 2d 位掩码(遮罩)的 Pygame 对象
用于快速实现完美的碰撞检测,Mask 可以精确到 1 个像素级别的判断。

Pygame 1.8 新增加的。

函数详解
pygame.mask.from_surface()
从指定 Surface 对象中返回一个 Mask。

from_surface(Surface, threshold = 127) -> Mask

Surface 对象中透明的部分设置为 1,不透明部分设置为 0。

检查每个像素的 alpha 值是否大于 threshold 参数指定的值。(alpha 通道使用 0 ~ 255 描述像素的透明度)

如果 Surface 对象是基于 colorkeys 实现的透明(而不是基于 pixel alphas),则忽略 threshold 参数。

注:关于 Surface 对象的透明实现,可参考:Pygame详解(十二):Surface 对象

pygame.mask.from_threshold()
从给定阈值的 Surface 对象中创建一个 Mask。

from_threshold(Surface, color, threshold = (0,0,0,255), othersurface = None, palette_colors = 1) -> Mask

从 Surface 对象中获取 Mask,这个方法更有特色。如果只提供一个 Surface 对象,那么 Surface 对象中所有与 threshold 参数提供颜色匹配的像素均被选入 Mask 中。如果指定了 othersurface 可选参数,那么被选入 Mask 中的像素不仅需要与 threshold 参数提供颜色匹配,还需要包含在 othersurface 指定的 Surface 对象中。

class pygame.mask.Mask
用于表示 2d 位掩码(遮罩)的 Pygame 对象。

Mask((width, height)) -> Mask

方法
pygame.mask.Mask.get_size()  ——  返回 Mask 的大小
pygame.mask.Mask.get_at()  ——  如果像素 (x, y) 被设置,返回值是非 0
pygame.mask.Mask.set_at()  ——  设置 Mask 中给定位置的值
pygame.mask.Mask.overlap()  ——  返回两个 Mask 在指定偏移处的重叠坐标(如果没有返回 None)
pygame.mask.Mask.overlap_area()  ——  返回两个 Mask 重叠的像素数量
pygame.mask.Mask.overlap_mask()  ——  将两个 Mask 重叠的部分创建一个新的 Mask
pygame.mask.Mask.fill()  ——  将所有的位设置为 1
pygame.mask.Mask.clear()  ——  将所有的位设置为 0
pygame.mask.Mask.invert()  ——  翻转 Mask 中所有的位(0 变 1,1 变 0)
pygame.mask.Mask.scale()  ——  缩放 Mask 的尺寸
pygame.mask.Mask.draw()  ——  将 Mask 绘制到另一个 Mask 上边
pygame.mask.Mask.erase()  ——  用另一个 Mask 擦除 Mask
pygame.mask.Mask.count()  ——  返回 Mask 被设置(为 1)的像素的数量
pygame.mask.Mask.centroid()  ——  返回 Mask 的重心点
pygame.mask.Mask.angle()  ——  返回像素的方向
pygame.mask.Mask.outline()  ——  用列表的形式返回组成对象轮廓的点
pygame.mask.Mask.convolve()  ——  返回其它 Mask 的卷积
pygame.mask.Mask.connected_component()  ——  返回与某像素区域的连接的 Mask
pygame.mask.Mask.connected_components()  ——  返回一组连接某像素区域的 Mask 的列表
pygame.mask.Mask.get_bounding_rects()  ——  返回一组像素边界矩形的列表
方法详解
pygame.mask.Mask.get_size()
返回 Mask 的大小。

get_size() -> width,height

pygame.mask.Mask.get_at()
如果像素 (x, y) 被设置,返回值是非 0。

get_at((x,y)) -> int

跟 Surface 对象一样,(0, 0) 表示左上角坐标。

pygame.mask.Mask.set_at()
设置 Mask 中给定位置的值。

set_at((x,y),value) -> None

pygame.mask.Mask.overlap()
返回两个 Mask 在指定偏移处的重叠坐标(如果没有返回 None)。

overlap(othermask, offset) -> x,y

重叠检测的偏移原理如下(偏移可以为负数):

+----+----------..
|A   | yoffset
|  +-+----------..
+--|B
|xoffset
|  |
:  :

pygame.mask.Mask.overlap_area()
返回两个 Mask 重叠的像素数量。

overlap_area(othermask, offset) -> numpixels

返回两个 Mask 重叠的像素数量,这可以用于查看在某方向上发生碰撞的部分,或者查看两个 Mask 有多少部分发生碰撞。相似的碰撞一般会通过计算重叠部分的梯度差分被发现。

dx = Mask.overlap_area(othermask,(x+1,y)) - Mask.overlap_area(othermask,(x-1,y))
dy = Mask.overlap_area(othermask,(x,y+1)) - Mask.overlap_area(othermask,(x,y-1))

pygame.mask.Mask.overlap_mask()
将两个 Mask 重叠的部分创建一个新的 Mask。

overlap_mask(othermask, offset) -> Mask

返回的 Mask 尺寸是原始 Mask 和 othermask 参数指定的 Mask 重叠部分。

pygame.mask.Mask.fill()
将所有的位设置为 1。

fill() -> None

将 Mask 中所有的位设置为 1。

pygame.mask.Mask.clear()
将所有的位设置为 0。

clear() -> None

将 Mask 中所有的位设置为 0。

pygame.mask.Mask.invert()
翻转 Mask 中所有的位(0 变 1,1 变 0)。

invert() -> None

翻转 Mask 中所有的位(0 变 1,1 变 0)。

pygame.mask.Mask.scale()
缩放 Mask 的尺寸。

scale((x, y)) -> Mask

Mask 根据指定尺寸缩放后返回一个新的 Mask。

pygame.mask.Mask.draw
将 Mask 绘制到另一个 Mask 上边。

draw(othermask, offset) -> None

将 Mask 绘制到另一个 Mask 上边,执行的是按位 or 操作。

pygame.mask.Mask.erase()
用另一个 Mask 擦除 Mask。

erase(othermask, offset) -> None

从 Mask 上擦除 othermask 指定的像素。

pygame.mask.Mask.count()
返回 Mask 被设置(为 1)的像素的数量。

count() -> pixels

返回 Mask 被设置(为 1)的像素的数量。

pygame.mask.Mask.centroid()
返回 Mask 的重心点。

centroid() -> (x, y)

找到 Mask 的重心点。如果 Mask 是空的,那么返回值是 (0, 0)。

pygame.mask.Mask.angle()
返回像素的方向。

angle() -> theta

找到图像中像素的大致方向(-90 度 ~ 90 度),这对于实现像素对接很有用。如果 Mask 是空的,那么返回值是 0.0。

pygame.mask.Mask.outline()
用列表的形式返回组成对象轮廓的点。

outline(every = 1) -> [(x,y), (x,y) ...]

返回值是一个由点组成的列表,用于描绘穿过 Mask 的第一个对象的轮廓线。

every 可选参数用于设置点的跨度,默认是每 1 个像素。

pygame.mask.Mask.convolve()
返回其它 Mask 的卷积。

convolve(othermask, outputmask=None, offset=(0,0)) -> Mask

返回一个由位组 (i-offset[0], j-offset[1]) 组成的 Mask,如果转换的 othermask 参数在右下角 (i, j) 处,那么会与自身重叠。

如果 outputmask 参数被指定,那么就会在 outputmask 参数上进行绘制,outputmask 参数会被返回。否则这个 Mask 的大小是 self.get_size() + othermask.get_size() - (1, 1)。

pygame.mask.Mask.connected_component()
返回与某像素区域的连接的 Mask。

connected_component((x,y) = None) -> Mask

它会使用 SAUF 算法进行连接需要连接的 Mask。它会连通 8 个点。默认情况下,它会返回在连接图像中最大的 Mask。可选项: 一对指定的坐标,与其相连的组件会被返回。如果像素位置没有被设置,那么返回的这个 Mask 就是空的。这个 Mask 的大小会与原始 Mask 一样。

pygame.mask.Mask.connected_components()
返回一组连接某像素区域的 Mask 的列表。

connected_components(min = 0) -> [Masks]

返回一组连接某像素区的 Mask 的列表。min 可选参数用于对每个连接区的指定部分过滤噪点。

pygame.mask.Mask.get_bounding_rects()
返回一组像素边界矩形的列表。

get_bounding_rects() -> Rects

它会获取连接着像素块的边界矩形。每个边界矩形都是一个连接每个像素的内矩形。
 

固定时间收敛的控制器设计(基础知识) 针对控制系统的有限时间收敛和固定时间收敛给出一些常用定理。 阅读详情

相关推荐

基于单片机的继电器参数测试系统设计

由于原有测试系统在参数设置上过于单一,在对继电器测试过程中需要多次进行器件连接,导致对其测试准确度下降,会造成继电器的二次损伤,基于单片机研究继电器参数测试系统的设计方法。在硬件设计上,构建二级模式集散控制框架,利用单片机进行数据采集和处理,满足实时继电器参数数据的同步控制;设计双极性反向比例输出电路,分别利用电极电阻对继电器两侧电压进行放大,实现继电器实时电压的检测。实验结果:以两组类型断电器为测试对象,分别连接示波器进行真实数据采集,在本文系统的应用下所得参数测试结果,与真实的数据相一致,具有实际应用效

weixin_45905610的博客 1439

pygame.mask原理及使用pygame.mask实现精准碰撞检测

通常一个游戏中会有很多角色出现,而这些角色之间的“碰撞”在所难免,例如炮弹是否击中了飞机等。碰撞检测在绝大多数游戏中都是一个必须处理的至关重要的问题。pygame提供了多种碰撞的检测方法,包括矩形碰撞检测、圆形碰撞检测和使用mask的精准碰撞检测。 一:矩形碰撞的缺点。 在游戏中一般用矩形图片来呈现角色,用矩形定义角色(图片)边界和位置,最简单的角色之间碰撞检测是检测两个角色的边界矩形是否存在重叠来完成。pygame.Rect类中有许多检测碰撞的方法,可检测点、矩形等是否在另一矩形中。但矩形碰撞检测方法有很

BAIFOL的博客 4084

Zynq UltraScale+网络加速方案:用AXI Ethernet Subsystem实现2.5G吞吐量的配置秘籍

本文详细介绍了在Xilinx Zynq UltraScale+平台上使用AXI Ethernet Subsystem实现2.5Gbps网络吞吐量的配置方法。通过硬件设计优化、Vivado工程配置、Linux驱动调优及性能测试等关键步骤,为工业视觉和5G前传等高速网络应用提供可靠解决方案。

weixin_30485379的博客 615

Pygame 精准检测图像碰撞

在用Pygame写游戏的时候,有人可能会遇到两个Rect对象碰撞但是对象之间还有空间间隔的问题,这里,将教大家用一种方法精准地检测图像碰撞。假设我们有两个图像(类型为Surface):surface1,surface2首先,获得这两个surface对象的rect: 然后,获取它们对应的mask对象,用pygame.mask.from_surface()方法,使用如下:pygame.mask.from_surface(surface)填入的是Surface对象,返回Mask对象代码如下: 接下来,进行

leleprogrammer的博客 3094

【DAY11】超参数调整专题1

核心优势: 它不是随机选择下一个点,而是根据先前评估的结果建立一个概率模型(通常是高斯过程),预测哪些参数组合可能产生更好的结果,并据此选择下一个评估点。这使得它在寻找最优解方面通常比随机搜索更高效(用更少的迭代次数达到相似或更好的性能),特别是当模型训练(单次评估)非常耗时的时候。实际上,有着非常多的方式可以实现贝叶斯优化,上面的代码比较简洁美观,贝叶斯优化和网格搜索的代码书写风格高度一致。- 需要定义参数的搜索空间,与随机搜索类似,当搜索空间非常大时,它通常比网格搜索和随机搜索更有效。

daomingwu1的博客 748

从摄像头选型到PCB布线:搞懂MIPI CSI带宽计算,避免你的嵌入式项目翻车

本文详细解析了MIPI CSI带宽计算在嵌入式项目中的关键作用,从摄像头选型到PCB布线提供全流程指导。通过实际案例和计算公式,帮助工程师准确计算带宽需求,避免图像丢帧和系统崩溃问题,同时优化PCB设计确保信号完整性。

weixin_30533109的博客 376

Pygame基础11-mask 蒙版

pygame蒙版

一只大鸽子的博客 996

【论文复现】HiDDeN:Hiding Data With Deep Networks

(标签)是 float 类型,但代码中传入的是 long 类型(整数标签)。函数参数解析方式变化,导致无法正确保存生成的图像结果。这是因为新版torchvision的。使用预训练模型进行隐写和提取测试。HiDDeN支持多种噪声层组合。打印变量的类型,分别是。

qq_69146676的博客 971

简单介绍Pygame 精准检测图像碰撞的问题

在用Pygame写游戏的时候,有人可能会遇到两个Rect对象碰撞但是对象之间还有空间间隔的问题,这里,将教大家用一种方法精准地检测图像碰撞。假设我们有两个图像(类型为Surface):surface1,surface2首先,获得这两个surface对象的rect: rect1=surface1.get_rect() rect2=surface2.get_rect() 然后,获取它们对应的mask对象,用pygame.mask.from_surface()方法,使用如下: pygame.mask.from_

Free雅轩的博客 948

ChatGPT Windows桌面版:从安全下载到高效配置的全流程指南

WebView封装技术是将网页应用转化为独立桌面程序的核心方法,它通过嵌入浏览器内核实现跨平台功能复用。其原理在于利用Electron或Tauri等框架,将Web内容打包进原生应用外壳,同时注入系统级API调用能力。这项技术的工程价值在于显著提升了Web应用的系统集成度和用户体验,使其能够支持全局快捷键、独立进程和本地数据存储等原生特性。在AI助手深度集成工作流的应用场景中,这种封装模式解决了浏览器多标签页切换繁琐、会话管理不便等痛点。本文以ChatGPT桌面客户端为例,详细解析了基于开源项目的安全下载路径

weixin_30437847的博客 488

背靠背VSC直流母线电压控制与同步发电机并网发散问题:原理、分析与解决方案

背靠背VSC直流母线电压控制与同步发电机并网发散问题分析 摘要: 本文研究了背靠背VSC系统在整流侧由理想三相电源切换为同步发电机时出现的直流母线电压振荡和发散问题。通过理论分析发现,锁相环同步失稳、等效阻抗失配和直流母线电容参数失配是导致系统失稳的关键因素。当整流侧接入同步发电机后,系统形成正反馈振荡回路,同时等效电感增大导致电流环响应速度降低,直流侧电容容量不足无法吸收发电机功率波动。文章提出了从跟网型控制到构网型VSG控制的完整升级方案,包含详细的MATLAB/Simulink建模和控制算法实现,并通

huanghm88的专栏 122

干货合集│最好用的 python 库都在这

这些有趣的 python 库,可以让你爱上 python

程序员亮仔 的博客 3551

Qt入门教程【环境搭建篇】Qt6+Mingw+QMake+QtCreator

Qt Windows平台安装

小鱼酱的博客 2万+

我的大学“博客之旅”总结

本文是一位双非大学生的编程学习总结,记录了从2022年开启的编程学习历程。作者分享了自己在哈尔滨求学期间的学习经历,包括接触机器学习、CV、NLP等领域的探索,以及通过优快云博客整理发布C/C++系列教程的过程。内容涵盖C/C++基础语法、指针、字符串处理、面向对象编程、模板元编程等核心知识点,共发布30余篇技术文章。由于考研一战失利,作者决定暂停博客更新,全身心投入二战备考。文章既是对编程学习阶段的总结,也表达了继续追逐哈工大梦想的决心。

羊小猪~~的博客 1194

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

有关pygame.掩码函数的问题

在人工智能大模型方面,`pygame.mask` 可以用于处理和模拟角色的碰撞检测。例如,你可以在游戏中创建一个角色的掩码,然后检查这个角色是否与其他对象的掩码相交,以此来判断角色是否与这些对象发生碰撞。更多的方法和功能可以参考官方文档:https://www.pygame.org/docs/ref/mask.html。`pygame.mask` 是 `pygame` 库中的一个模块,用于处理图像的透明区域。# 假设我们有两个图像,一个是角色的图像,另一个是墙壁的图像。# 创建角色的掩码和墙的掩码。

353

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

YOLOv8 overlap_mask掩码重叠处理逻辑

YOLOv8通过overlap_mask机制解决实例分割中的像素级重叠问题,采用置信度优先的贪婪策略实现掩码去重。该方法在推理末端高效生成互斥分割结果,无需额外训练,兼顾速度与可用性,特别适用于密集目标和遮挡场景,已成为工业落地中的关键后处理环节。

weixin_30923011的博客 635

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

YOLOv8训练参数详解

参考这里的定义双焦点损失 (DFL)双焦点损失(DFL)缓解了分类和语义分割中的类不平衡问题。此损失函数的灵感来自焦点损失 (FL)函数的特性,该函数加剧了数据点的损失,在预测输出和实际输出之间产生较大差异。因此,如果由于类不平衡或其他一些原因,数据点难以分类,FL 使神经网络更多地关注该数据点以及类似的数据点。DFL采用了这一思路,并通过增强梯度条件提高了FL的性能。

githubcurry,985cs博士在读 2万+

YOLOv8参数解释

YOLOv8参数解释

qq_44903752的博客 5698

模块十:mask模块

mask模块主要用于创建图像surface的遮罩,也称蒙版。用Mask对象来表示,常常用于来检测物体之间是否发生碰撞。mask模块的主要方法如下: # 从给定的surface的不透明像素创建一个mask对象 # 如果使用了颜色键,则所有等于color_key的像素都会被设置,不等于color_key的像素不会被设置 # 如果没有使用颜色键,则使用每个像素的alpha值来决定设置结果掩码中的哪些位,alpha大于thresh的值会被设置 mask1 = pygame.mask.from_surface(ima

weixin_49346755的博客 3719

yolov8训练参数讲解

【代码】yolov8训练参数讲解。

图灵追幕者博客录 6751

pygame的mask测试_作者:李兴球

""" mask测试,mask就是膜或罩的意思,可以从一个图片创建一个mask,但要转换alpha的,否则就失去了意义. 我们可以想像给一个透明的图片覆一层膜,也就是mask,但是透明的地方这层膜是不会覆盖的。 mask.overlap的offset偏移量是设置两个mask之间的x和y距离。例: Amask是一个迷宫的mask,Bmask是一个小球的mask 那么 Amask.overlap...

李兴球的专栏 2352

YOLOv8训练参数详解(全面详细、重点突出、大白话阐述小白也能看懂)

model: 模型文件的路径。这个参数指定了所使用的模型文件的位置,例如 yolov8n.pt 或 yolov8n.yaml。模型文件包含了已经训练好的模型的权重和结构。 data: 数据文件的路径。该参数指定了数据集文件的位置,例如 coco128.yaml。数据集文件包含了训练和验证所需的图像、标签和其他数据的信息。 epochs: 训练的轮数。这个参数确定了模型将会被训练多少次,每一轮都遍历整个训练数据集。训练的轮数越多,模型对数据的学习就越充分,但也增加了训练时间。

qq_37553692的博客 12万+

函数pygame.mask.from_threshold()用阈值确定mask碰撞点原理及使用方法

pygame.mask.from_threshold使用阈值,而不是使用是否透明在mask中确定那些像素点参加碰撞。该函数选择不同参数,可创建2种不同mask。1种mask可侦测1个角色和指定颜色碰撞。另一种是用一个Surfaces决定另一个Surfaces的mask中那些像素点参加碰撞检测。

geng_zhaoying的博客 876

Wider Face+YOLOV8人脸检测

使用wider face数据集训练yolov8模型

chen_znn的博客 2万+
上一篇: pygame.mask原理及使用pygame.mask实现精准碰撞检测
下一篇: python--获取网络时间--与当前时间比较
BAIFOL
博客等级 码龄5年 116粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值