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

图像对比分析并生成报告

pip install pyautogui

"""
图像对比分析工具
功能:实现像素级差异、结构相似性(SSIM)、直方图相似度和特征匹配率四种对比方法
作者:智能助手
版本:1.2
日期:2025-02-27"""
import os
import cv2
import pyautogui
import numpy as np
from skimage.metrics import structural_similarity as ssim
from matplotlib import pyplot as plt
from datetime import datetimeclass ImageComparator:def __init__(self, img1_path, img2_path):"""初始化图像比较器参数:img1_path: 第一张图片路径img2_path: 第二张图片路径"""# 读取并预处理图像self.img1 = self._preprocess_image(cv2.imread(img1_path))self.img2 = self._preprocess_image(cv2.imread(img2_path))self._validate_images()  # 验证图像有效性def _validate_images(self):"""验证图像有效性并统一尺寸"""if self.img1 is None or self.img2 is None:raise ValueError("无法加载图像文件")if self.img1.shape != self.img2.shape:self._resize_images()  # 自动调整图像尺寸def _resize_images(self, method=cv2.INTER_AREA):"""统一图像尺寸参数:method: 插值方法,默认使用区域插值(速度快)"""h, w = self.img1.shape[:2]self.img2 = cv2.resize(self.img2, (w, h), interpolation=method)def _preprocess_image(self, img):"""图像预处理流程:1. 高斯模糊降噪2. CLAHE对比度受限直方图均衡化"""# 高斯模糊(核大小5x5,标准差自动计算)img = cv2.GaussianBlur(img, (5, 5), 0)# 转换到LAB颜色空间处理明度通道lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)l, a, b = cv2.split(lab)# 创建CLAHE对象(对比度限制2.0,网格大小8x8)clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8))l_clahe = clahe.apply(l)  # 应用对比度均衡# 合并通道并转回BGR空间lab = cv2.merge((l_clahe, a, b))return cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)def pixel_diff(self, threshold=5, visualize=False):"""像素级差异分析参数:threshold: 差异百分比阈值(默认5%)visualize: 是否可视化差异返回:差异百分比和是否超过阈值"""# 计算绝对差异矩阵diff = cv2.absdiff(self.img1, self.img2)# 计算总差异量(三通道总和)diff_sum = np.sum(diff)# 计算差异百分比(相对于最大可能差异)diff_percent = diff_sum / (self.img1.size * 255) * 100if visualize:self._plot_images(diff, "Pixel Difference")return {"difference_percent": round(diff_percent, 2),"is_different": diff_percent > threshold}def ssim_compare(self, visualize=False):"""结构相似性指数(SSIM)计算参数:visualize: 是否可视化差异图返回:SSIM分数和相似性判断"""# 转换为灰度图像gray1 = cv2.cvtColor(self.img1, cv2.COLOR_BGR2GRAY)gray2 = cv2.cvtColor(self.img2, cv2.COLOR_BGR2GRAY)# 计算SSIM(使用11x11高斯窗口)score, diff = ssim(gray1, gray2, full=True)# 将差异矩阵转换为0-255范围diff = (diff * 255).astype("uint8")if visualize:self._plot_images(diff, f"SSIM {score:.2f}")return {"ssim_score": round(score, 3),"is_similar": score > 0.95  # 经验阈值}def histogram_compare(self, method=cv2.HISTCMP_CORREL):"""直方图相似度计算参数:method: 比较方法(默认相关性)可选方法:HISTCMP_CORREL: 相关性(0-1)HISTCMP_CHISQR: 卡方检验(越小越相似)HISTCMP_BHATTACHARYYA: 巴氏距离(0-1,0最相似)"""# 计算三维直方图(每个通道256级)hist1 = cv2.calcHist([self.img1], [0, 1, 2], None, [256, 256, 256], [0, 256, 0, 256, 0, 256])hist2 = cv2.calcHist([self.img2], [0, 1, 2], None, [256, 256, 256], [0, 256, 0, 256, 0, 256])# 归一化直方图cv2.normalize(hist1, hist1, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)cv2.normalize(hist2, hist2, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX)# 计算直方图相似度similarity = cv2.compareHist(hist1, hist2, method)return round(similarity, 3)def feature_match(self):"""特征匹配率计算使用ORB特征检测器+暴力匹配返回:优质匹配率(匹配距离<50的比例)"""# 初始化ORB检测器orb = cv2.ORB_create()# 检测关键点和计算描述子kp1, des1 = orb.detectAndCompute(self.img1, None)kp2, des2 = orb.detectAndCompute(self.img2, None)# 当没有检测到特征点时返回0if des1 is None or des2 is None:return 0.0# 创建暴力匹配器(汉明距离)bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)matches = bf.match(des1, des2)# 按距离排序matches = sorted(matches, key=lambda x: x.distance)# 筛选优质匹配(距离<50)good_matches = [m for m in matches if m.distance < 50]# 计算优质匹配率match_rate = len(good_matches) / len(matches) if matches else 0return round(match_rate, 3)def _plot_images(self, diff, title):"""可视化对比结果参数:diff: 差异矩阵title: 图表标题"""# 获取屏幕分辨率用于调整显示大小screen_width, screen_height = pyautogui.size()plt.figure(figsize=(screen_width / 100, screen_height / 100))# 子图布局说明:# 221 -> 2行2列的第1个位置# 223 -> 2行2列的第3个位置# 122 -> 1行2列的第2个位置# 原始图像对比plt.subplot(221), plt.imshow(cv2.cvtColor(self.img1, cv2.COLOR_BGR2RGB))plt.title('Image 1'), plt.axis('off')plt.subplot(223), plt.imshow(cv2.cvtColor(self.img2, cv2.COLOR_BGR2RGB))plt.title('Image 2'), plt.axis('off')# 差异图显示plt.subplot(122), plt.imshow(diff, cmap='gray')plt.title(title), plt.axis('off')# 保存并关闭图表(避免内存泄漏)plt.tight_layout()plt.savefig(f"res_{title.split(' ')[0]}.png")plt.close()def generate_report(self, results, filename="report.html"):"""生成HTML格式的测试报告参数:results: 包含各指标的字典filename: 输出文件名"""html_template = f"""<html><head><title>图像对比报告 {datetime.now().strftime("%Y-%m-%d %H:%M")}</title><style>/* 表格样式 */table {{ border-collapse: collapse; width: 80%;margin: 20px auto;box-shadow: 0 1px 3px rgba(0,0,0,0.2);}}th, td {{border: 1px solid #ddd;padding: 12px;text-align: left;}}th {{background-color: #4CAF50;color: white;}}tr:nth-child(even) {{ background-color: #f8f9fa; }}/* 图片容器样式 */.image-container {{text-align: center;margin: 20px;}}img {{ max-width: 45%;margin: 10px;box-shadow: 0 2px 4px rgba(0,0,0,0.1);}}</style></head><body><h2 style="text-align: center;">图像对比分析报告</h2><!-- 结果汇总表格 --><table><tr><th>指标</th><th>结果</th><th>判断标准</th></tr><tr><td>像素差异率</td><td>{results['pixel_diff']}%</td><td>阈值 &lt;5%</td></tr><tr><td>SSIM评分</td><td>{results['ssim']}</td><td>阈值 &gt;0.95</td></tr><tr><td>直方图相似度</td><td>{results['histogram']}</td><td>相关性 &gt;0.9</td></tr><tr><td>特征匹配率</td><td>{results['feature_match']}</td><td>优质率 &gt;30%</td></tr></table><!-- 差异图展示 --><div class="image-container"><h3>差异可视化</h3><img src="res_Pixel.png" alt="像素差异图"><img src="res_SSIM.png" alt="SSIM差异图"></div></body></html>"""# 写入HTML文件with open(filename, 'w', encoding='utf-8') as f:f.write(html_template)print(f"报告已生成: {filename}")if __name__ == "__main__":# 文件路径img1_path = "qian-c.png"img2_path = "qian-w.png"# 检查文件是否存在if not os.path.exists(img1_path):print(f"文件不存在: {img1_path}")if not os.path.exists(img2_path):print(f"文件不存在: {img2_path}")# 使用示例comparator = ImageComparator(img1_path, img2_path)# 执行各对比方法pixel_results = comparator.pixel_diff(visualize=True)ssim_results = comparator.ssim_compare(visualize=True)histogram_results = comparator.histogram_compare()feature_results = comparator.feature_match()# 汇总结果results = {"pixel_diff": pixel_results["difference_percent"],"ssim": ssim_results["ssim_score"],"histogram": histogram_results,"feature_match": feature_results}# 生成报告comparator.generate_report(results)

对比结果

在这里插入图片描述

相关文章:

图像对比分析并生成报告

pip install pyautogui """ 图像对比分析工具 功能&#xff1a;实现像素级差异、结构相似性(SSIM)、直方图相似度和特征匹配率四种对比方法 作者&#xff1a;智能助手 版本&#xff1a;1.2 日期&#xff1a;2025-02-27""" import os import cv2 …...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vue 基础行拖拽排序示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vu…...

vue-如何将组件内容作为图片生成-html2canvas

1.引入必要的库 这里呢我们使用 html2canvas 库来将 HTML 元素转换为画布&#xff08;canvas&#xff09;&#xff0c;然后再将其导出为图片。首先&#xff0c;确保在项目中安装了 html2canvas&#xff1a; npm install html2canvas 2. 组件结构 然后在我们的vue文件里面&a…...

单片机 - RAM 与内存、ROM 与硬盘 之间的详细对比总结

RAM 与 内存 RAM&#xff08;Random Access Memory&#xff0c;随机存取存储器&#xff09; 和 内存 这两个术语通常是 同义词&#xff0c;即 内存 常常指的就是 RAM。 1. RAM&#xff08;内存&#xff09; 定义&#xff1a;RAM 是计算机中的 主存储器&#xff0c;用于临时存…...

Linux 练习一 NFS和DNS

练习四 任务需求&#xff1a;客户端通过访问 www.nihao.com 后&#xff0c;能够通过 dns 域名解析&#xff0c;访问到 nginx 服务中由 nfs 共享的首页文件&#xff0c;内容为&#xff1a;Very good, you have successfully set up the system. 各个主机能够实现时间同步&#…...

aab 转 apk

googleplay发布的游戏对外前&#xff0c;测试同学要安装到手机上先行测试&#xff0c;所以就有了这个需求。网上找了一篇文章讲的很详细了&#xff0c;文档是英语的&#xff0c;这里摘抄重要的部分做下记录&#xff1a; https://www.geekdashboard.com/extract-apk-files-from…...

JAVA开发:实例成员与静态成员

判断Java中的实例成员与静态成员 在Java中&#xff0c;可以通过以下几种方式判断一个成员是实例成员还是静态成员&#xff1a; 1. 通过声明方式判断 静态成员使用static关键字修饰&#xff0c;实例成员不使用&#xff1a; public class MyClass {// 实例成员int instanceVa…...

DeepSeek面试——模型架构和主要创新点

本文将介绍DeepSeek的模型架构多头潜在注意力&#xff08;MLA&#xff09;技术&#xff0c;混合专家&#xff08;MoE&#xff09;架构&#xff0c; 无辅助损失负载均衡技术&#xff0c;多Token 预测&#xff08;MTP&#xff09;策略。 一、模型架构 DeepSeek-R1的基本架构沿用…...

[项目]基于FreeRTOS的STM32四轴飞行器: 十二.角速度加速度滤波

基于FreeRTOS的STM32四轴飞行器: 十二.滤波 一.滤波介绍二.对角速度进行一阶低通滤波三.对加速度进行卡尔曼滤波 一.滤波介绍 模拟信号滤波&#xff1a; 最常用的滤波方法可以在信号和地之间并联一个电容&#xff0c;因为电容通交隔直&#xff0c;信号突变会给电容充电&#x…...

《基于SpringBoot的图书网购平台的设计与实现》开题报告

个人主页&#xff1a;大数据蟒行探索者 一、选题的依据及意义 1.1选题来源 市场需求驱动&#xff1a;如今&#xff0c;互联网深度融入人们生活&#xff0c;阅读场景愈发多元化&#xff0c;线上购书成为主流趋势之一。读者期望随时随地浏览海量图书资源&#xff0c;对比价格…...

Python 非异步函数执行异步函数的方案

import asyncio import sys from your_module import browser_main # 替换为你的实际模块名 async def _keep_alive(): """保持程序持续运行""" while True: await asyncio.sleep(1) def run_browser(index: int None): """ 执…...

计算机期刊推荐 | 工程技术-电子与电气, 计算机

IET Microwaves Antennas & Propagation的新特刊&#xff1a;《天线与超材料的设计、合成、仿真与实验》 学科领域&#xff1a; 工程技术-电子与电气, 计算机 期刊类型&#xff1a; SCI/SSCI/AHCI 收录数据库&#xff1a; SCI(SCIE) ISSN&#xff1a; 1751-8725 中科院…...

【开源宝藏】30天学会CSS - DAY9 第九课 牛顿摆动量守恒动画

以下是一份逐步拆解教程&#xff0c;带你从零理解并复刻这个牛顿摆&#xff08;Pendulum of Newton&#xff09;动画效果&#xff0c;这是一个经典的物理演示模型&#xff0c;现在通过纯 HTML 和 CSS 实现出来&#xff0c;视觉效果炫酷、结构简洁。 &#x1f3af; 动画效果说明…...

对三维物体模型的阈值操作

对三维物体模型的阈值操作 1. 使用point_coord_x、point_coord_y、point_coord_z阈值分割麻辣兔头2. point_normal_x、point_normal_y、point_normal_z有什么区别&#xff1f;3. 去除离群点 1. 使用point_coord_x、point_coord_y、point_coord_z阈值分割麻辣兔头 dev_open_win…...

【Unity网络编程知识】使用Socket实现简单TCP通讯

1、Socket的常用属性和方法 创建Socket TCP流套接字 Socket socketTcp new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 1.1 常用属性 1&#xff09;套接字的连接状态 socketTcp.Connected 2&#xff09;获取套接字的类型 socketTcp.So…...

简记_单片机硬件最小系统设计

以STM32为例&#xff1a; 一、电源 1.1、数字电源 IO电源&#xff1a;VDD、VSS&#xff1a;1.8~3.6V&#xff0c;常用3.3V&#xff0c;去耦电容1 x 10u N x 100n &#xff1b; 内核电源&#xff1a;内嵌的稳压器输出&#xff1a;1.2V&#xff0c;给内核、存储器、数字外设…...

Android Launcher实战:完美复刻iOS风格Hotseat布局优化

一、需求背景与效果呈现 在Android 13系统深度定制过程中&#xff0c;原生Launcher的Hotseat布局因视觉效果平庸需要进行UI重构。产品团队要求仿照iOS系统设计&#xff0c;实现以下核心特性&#xff1a; 取消传统横屏铺满效果 采用居中显示布局方案 支持圆角背景与智能边距调…...

2025-3-25算法打卡

一&#xff0c;走迷宫 1.题目描述&#xff1a; 给定一个 NMNM 的网格迷宫 GG。GG 的每个格子要么是道路&#xff0c;要么是障碍物&#xff08;道路用 11 表示&#xff0c;障碍物用 00 表示&#xff09;。 已知迷宫的入口位置为 (x1,y1)(x1​,y1​)&#xff0c;出口位置为 (x…...

Python:进程的常用方法,注意细节,进程线程对比

进程常用方法&#xff1a; start()&#xff1a;启动进程实例 is_alive()&#xff1a;判断子进程的存活状态&#xff0c;返回True或False&#xff0c;子进程执行完后的状态为False join([timeout])&#xff1a;是否等待子进程执行结束(在当前位置阻塞主进程)主进程等子进程多长…...

北京交通大学第三届C语言积分赛

作者有言在先&#xff1a; 题解的作用是交流思路&#xff0c;不是抄作业的。可以把重点放在思路分析上而不是代码上&#xff0c;毕竟每个人的代码风格是不一样的&#xff0c;看别人的代码就跟做程序填空题一样。先看明白思路再看代码。 还有就是&#xff0c;deepseek真的很好用…...

架构设计之自定义延迟双删缓存注解(下)

架构设计之自定义延迟双删缓存注解(下) 小薛博客官方架构设计之自定义延迟双删缓存注解(下)地址 为了保证Cache和ClearAndReloadCache的灵活性&#xff0c;特意加入EL表达式解析 1、Cache package com.xx.cache;import java.lang.annotation.*; import java.util.concurren…...

SingleMod

SingleMod SingleMod是一种深度学习模型,专为利用纳米孔直接RNA测序(DRS)数据在单RNA分子中精确检测m6A修饰而设计。该模型通过深度多实例回归框架进行训练,能够充分利用广泛的甲基化率标签。SingleMod是一个通用框架,可轻松适配其他核酸修饰的检测模型训练。 注意: Si…...

SQL-查询漏洞

一、查询注入的数据类型 //list.php<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatiable" content"IEedge"><meta name"viewport" content&…...

Maven 多模块项目(如微服务架构)中,父 POM(最外层) 和 子模块 POM(具体业务模块)的区别和联系

文章目录 **1. 父 POM 的核心职责****1.1 依赖管理 (dependencyManagement)****1.2 插件管理 (pluginManagement)****1.3 其他公共配置** **2. 子模块 POM 的核心职责****2.1 依赖声明 (dependencies)****2.2 插件启用与覆盖 (plugins)** **3. 核心对比表****4. 使用场景示例**…...

【AIGC】图片变视频 - SD ComfyUI视频生成

效果图 完整过程 SD ComfyUI 下载 下载 https://pan.quark.cn/s/64b808baa960 解压密码&#xff1a;bilibili-秋葉aaaki 完整 https://www.bilibili.com/video/BV1Ew411776J/ SD ComfyUI 安装 1.解压 2.将controlnet内部文件复制到 ComfyUI-aki-v1.6\ComfyUI\models\control…...

思考我的未来职业

李升伟 编译 关于我 我是一名专注于后端开发的软件工程师&#xff0c;拥有十年专业编程经验。从学生时代起&#xff0c;编程就是我的热情所在&#xff0c;并一直保持着这个长期爱好。此外&#xff0c;我也热爱动漫和电影。 然而过去几年&#xff0c;婚姻、家庭责任和育儿让生…...

StarRocks数据导入

文章目录 StarRocks数据导入Broker LoadETL 集群导数非 ETL 集群导数Broker Load 任务查看BrokerLoad⼤数据量导⼊优化参数推荐配置BrokerLoad 排查思路 Insert IntoInsert Into大数据量导入优化参数 Stream LoadStreamLoad⼤数据量导⼊优化参数推荐配置Stream Load 排查思路 R…...

mmdetection安装

链接: link...

光学像差的类型与消除方法

### **光学像差的类型、理解与消除方法** 光学像差是指实际光学系统成像时&#xff0c;由于透镜或反射镜的非理想特性导致的光线偏离理想路径&#xff0c;从而影响成像质量的现象。像差可分为**单色像差**&#xff08;与波长无关&#xff09;和**色差**&#xff08;与波长相关…...

Manus AI 破局多语言手写识别,解锁智能新天地

Manus AI 破局多语言手写识别&#xff0c;解锁智能新天地 前言 在人工智能技术不断渗透各行各业的背景下&#xff0c;手写识别领域长期面临多语言适配难、复杂场景泛化能力弱等挑战。ManusAI凭借其创新的算法架构和多模态融合技术&#xff0c;成功突破传统OCR&#xff08;光学…...

文字颜色的渐变(svg实现)

一 上下渐变&#xff08;有底部阴影&#xff09; 效果如图&#xff1a; svg代码如下&#xff1a; <svg width"300" height"100" xmlns"http://www.w3.org/2000/svg"><defs><linearGradient id"textGradient" x1"…...

Java-设计模式

Java-设计模式 ⓪设计模式基础 ❶设计模式分类 创建型模式 用于描述对象实例化&#xff08;创建对象&#xff09;的模式&#xff0c;即用于解耦对象的实例化过程 GoF&#xff08;四人组&#xff09;书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 …...

“我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验

“我是GM”之NAS搭建Luanti游戏服务器&#xff0c;开启沙盒游戏新体验 哈喽小伙伴们好&#xff0c;我是Stark-C~ 曾几何时&#xff0c;哪怕是现在&#xff0c;估计依然有很多小伙伴沉迷于开放性和自由度极高的《我的世界》这种沙盒游戏吧~。 我个人到现在手机上还有这款游戏…...

K8S学习之基础五十:k8s中pod时区问题并通过kibana查看日志

k8s中pod默认时区不是中国的&#xff0c;挂载一个时区可以解决 vi pod.yaml apiVersion: v1 kind: Pod metadata:name: counter spec:containers:- name: countimage: 172.16.80.140/busybox/busybox:latestimagePullPolicy: IfNotPresentargs: [/bin/sh,-c,i0;while true;do …...

光电效应及普朗克常数的测定数据处理 Python实现

内容仅供参考&#xff0c;如有错误&#xff0c;欢迎指正&#xff0c;如有疑问&#xff0c;欢迎交流。 因为我不会Excel所以只能用Python来处理 祝大家早日摆脱物理实验的苦海 用到的一些方法 PCHIP &#xff08;分段三次埃尔米特插值多项式&#xff09; 因为实验时记录的数…...

hyperf中关于时间的设定

下面我来总结这三者的用法和它们之间的关系&#xff1a; 1. protected ?string $dateFormat U; 作用&#xff1a; 定义数据库日期字段的存储格式‘U’ 表示使用 Unix 时间戳格式&#xff08;秒级&#xff0c;10位数字&#xff09; 影响范围&#xff1a; 决定了模型从数据…...

编程实现自我指涉(self-reference)

从计算机的组成原理出发&#xff0c;编程实现自我指涉&#xff08;self-reference&#xff09;本质上是通过代码操纵代码&#xff0c;形成逻辑上的闭环。这种能力不仅是编程语言设计中的一个奇妙现象&#xff0c;更是计算理论、计算机架构、乃至哲学层面的一种深刻映射。让我们…...

数据类设计_图片类设计_矩阵图类型和像素图类型设计的补充

前言 以矩阵图类型和像素图类型作为图像类数据的基础,但在使用过程中有个问题:矩阵图形和像素图形的尺寸---长和高没有表现出来,本贴对此做出分析. 引入 原帖数据类设计_图片类设计之7_矩阵图形类设计更新_实战之页面简单设计&#xff08;前端架构&#xff09;-CSDN博客里有对…...

php写入\查询influxdb数据

namespace app\index\controller;use InfluxDB2\Client; use InfluxDB2\Model\WritePrecision; use InfluxDB2\Point;class Demo {/*** 显示资源列表** return \think\Response*/public function index(){$token 你的TOKEN;$org zzlichi;$bucket initdb;$client new Client…...

新手村:逻辑回归-理解02:逻辑回归中的伯努利分布

新手村&#xff1a;逻辑回归-理解02&#xff1a;逻辑回归中的伯努利分布 伯努利分布在逻辑回归中的潜在含义及其与后续推导的因果关系 1. 伯努利分布作为逻辑回归的理论基础 ⭐️ 逻辑回归的核心目标是: 建模二分类问题中 目标变量 y y y 的概率分布。 伯努利分布&#xff08…...

Python正则表达式(一)

目录 一、正则表达式的基本概念 1、基本概念 2、正则表达式的特殊字符 二、范围符号和量词 1、范围符号 2、匹配汉字 3、量词 三、正则表达式函数 1、使用正则表达式&#xff1a; 2、re.match()函数 3、re.search()函数 4、findall()函数 5、re.finditer()函数 6…...

JavaScript基础-事件委托(代理、委派)

在Web开发中&#xff0c;处理用户交互时经常需要监听DOM元素上的事件。然而&#xff0c;当页面上存在大量的动态生成的元素时&#xff0c;直接给每个元素绑定事件处理器可能会导致性能问题和代码管理复杂度增加。这时&#xff0c;事件委托提供了一种更加高效且易于维护的解决方…...

《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型理解重叠 I/O 模型重叠 I/O本章讨论的重叠 I/O 的重点不在于 I/O 创建重叠 I/O 套接字执行重叠 I/O 的 WSASend 函数进行重叠 I/O 的 WSA…...

【区块链安全 | 第二篇】区块链概念详解

文章目录 概述1. 区块链类型2 区块链五层架构3 账本模型4. 节点&#xff08;Node&#xff09;5. 区块&#xff08;Block&#xff09;6. 区块链&#xff08;Blockchain&#xff09;7. 区块链工作流程 核心技术1. 共识机制2. 智能合约 主要组件1. 交易&#xff08;Transaction&am…...

Android实践开发制作小猴子摘桃小游戏

Android实践制作小猴子摘桃小游戏 实践素材项目源文件获取&#xff1a;Android可以存在版本差异项目如果不能正确运行&#xff0c;可以使用里面的素材自己构建项目Android实践制作小猴子摘桃小游戏Android实践制作小猴子摘桃小游戏https://mp.weixin.qq.com/s/jNU_hVfj9xklsil…...

“11.9元“引发的系统雪崩:Spring Boot中BigDecimal反序列化异常全链路狙击战 ✨

&#x1f4a5; "11.9元"引发的系统雪崩&#xff1a;Spring Boot中BigDecimal反序列化异常全链路狙击战 &#x1f3af; &#x1f50d; 用 Mermaid原生防御体系图 #mermaid-svg-XZtcYBnmHrF9bFjc {font-family:"trebuchet ms",verdana,arial,sans-serif;fon…...

【C++】回调函数和回调对象

文章目录 回调可调用对象函数指针作回调函数对象作回调函数对象的使用std::function【C11】作回调使用 【C11】Lambda表达式作回调【C11】bind对象作回调std::bind的使用作回调使用 回调 当发生某种事件时需要调用或触发另一个事件即为回调&#xff0c;回调的核心即为将可调用…...

电子产品可靠性预计怎么做?

目录 1、电子产品可靠性预计的目的 2、电子产品可靠性预计的常用方法 2.1、基于统计数据的预计方法 2.2、物理模型预计方法 2.3、加速寿命试验 2.4、基于仿真的预计方法 3、电子产品可靠性预计的步骤 3.1、定义可靠性指标 3.2、收集数据 3.3、建立模型 3.4、进行仿真…...

Ubuntu20.0.4创建ssh key以及repo命令的使用

创建ssh key ssh-keygen //一路回车&#xff0c;不用输入任何东西cat ~/.ssh/id_rsa.pub 配置git config git config --global user.name xxx // 设置git用户名git config --global user.email xxx.com.cn //设置git 邮箱git config --list// remove the git config// rm -fr …...

Java动态代理的使用和安全问题

前言&#xff1a; java的动态代理是指进行明确的分工的操作&#xff08;多接口 比如我是酒店的老板 有人找我合作 需要先经过前台 我的助理 而不是直接找我&#xff09; 序列化 &#xff1a;为什么序列化 序列化的对象是一个类 我们也叫对象 class一堆东西里面有很多函…...