Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)
一、 高斯滤波
边缘检测本身属于锐化操作,对噪点比较敏感,所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。
二、计算图像的梯度和方向
三、非极大值抑制
在得到每个边缘的方向之后,其实把它们连起来边缘检测就算完了,经过第二步得到的边缘不经过处理是没办法使用的,因为高斯滤波的原因,边缘会变得模糊,导 致经过第二步后得到的边缘像素点非常多,因此我们需要对其进行一些过滤操作,而非极大值抑制就是 一个很好的方法,它会对得到的边缘像素进行一个排除,使边缘尽可能细一点。
在该步骤中,我们需要检查每个像素点的梯度方向上的相邻像素,并保留梯度值最大的像素,将其他像 素抑制为零。假设当前像素点为(x,y),其梯度方向是0°,梯度值为G(x,y),那么我们就需要比 较G(x,y)与两个相邻像素的梯度值:G(x-1,y)和G(x+1,y)。如果G(x,y)是三个值里面最 大的,就保留该像素值,否则将其抑制为零。
并且如果梯度方向不是0°、45°、90°、135°这种特定角度,那么就要用到插值算法来计算当前像素点在 其方向上进行插值的结果了,然后进行比较并判断是否保留该像素点。这里使用的是单线性插值,通过 A1和A2两个像素点获得dTmp1与dTmp2处的插值,然后与中心点C进行比较。具体的插值算法请参考图 像旋转实验。
四、 双阈值筛选
经过非极大值抑制之后,我们还需要设置阈值来进行筛选,当阈值设的太低,就会出现假边缘,而阈值 设的太高,一些较弱的边缘就会被丢掉,因此使用了双阈值来进行筛选,推荐高低阈值的比例为2:1到 3:1之间
当某一像素位置的幅值超过最高阈值时,该像素必是边缘像素;当幅值低于最低像素时,该像素必不是 边缘像素;幅值处于最高像素与最低像素之间时,如果它能连接到一个高于阈值的边缘时,则被认为是 边缘像素,否则就不会被认为是边缘。
也就是说,上图中的A和C是边缘,B不是边缘。因为C虽然不超过 最高阈值,但其与A相连,所以C就是边缘。
具体来说,对于非极大值抑制之后的图像来说,设置两个阈值threshold1和threshold2,其中 threshold1是低阈值,threshold2是高阈值。然后遍历图像,把梯度值小于低阈值的点的梯度值设为 0,得到图像1,把梯度值小于高阈值的点的梯度值设为0,得到图像2。由于图像2的阈值比较高,所以 其中会损失掉很多有用的图像信息,而图像1的阈值比较低,所以会保留很多的信息,包括真正的边缘和虚假的边缘。
那么我们就可以以图像2为基础,以图像1为补充来连接图像的边缘,其具体步骤为:
• 对图像2进行遍历,当遇到一个非零的像素点P时,记录以P为开始的轮廓线,知道轮廓线的终点位 置Q。
• 考察图像1中与图像2中的Q点位置对应的点S的8邻近区域,如果在S点的8邻近区域内有非零像素存 在,就将其作为边界点放入图像2中作为点R。然后再从点R开始重复第一步,直到在图像1和图像2 中都无法继续为止。
• 当完成对包含点P的轮廓线的寻找之后,将这条轮廓线标为已寻找,然后接着寻找下一条轮廓,就 是重复第1步、第2步、第3步,直到图像2中找不到新的轮廓为止。
经过筛选之后的所保存下来的点就是我们图像中的边缘点了
五、图像边缘检测
5.1、有二值化
导入模块
import cv2
输入图像
img=cv2.imread('lenda01.png')
灰度化
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
二值化
ret1,img_threshold1=cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)
高斯滤波
img_Guss1=cv2.GaussianBlur(img_threshold1,(5,5),sigmaX=1.5)
梯度与方向
非极大值抑制
双阈值筛选
img_Canny1=cv2.Canny(img_Guss1,122,127,L2gradient=True)
输出图像
cv2.imshow('img',img)
cv2.imshow('img_Canny1',img_Canny1)
cv2.waitKey(0)
完整代码
import cv2 img = cv2.imread('lenda01.png') # 将图像从BGR颜色空间转换为灰度图像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用全局阈值进行二值化处理
# - ret1: 计算得到的阈值 (127)
# - img_threshold1: 二值化后的图像,像素值大于127设置为255,否则设置为0
ret1, img_threshold1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY) # 使用 Otsu's 阈值法进行二值化处理,并进行反转
# - ret2: Otsu's算法计算得到的阈值
# - img_threshold2: 二值化后的图像,像素值小于阈值设置为255,否则设置为0
ret2, img_threshold2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV) # 对二值化后的图像进行高斯模糊处理,以减少噪声
# - img_threshold1: 输入图像(二值化后的图像)
# - (5, 5): 高斯核的大小
# - sigmaX=1.5: X方向上的高斯核标准差
img_Guss1 = cv2.GaussianBlur(img_threshold1, (5, 5), sigmaX=1.5) # 使用 Canny 边缘检测算法提取图像的边缘
# - img_Guss1: 输入图像(高斯模糊后的二值化图像)
# - ret2: 低阈值,用于边缘检测的阈值下限 (这里使用Otsu算法计算得到的阈值)
# - ret1: 高阈值,用于边缘检测的阈值上限 (这里使用固定阈值127)
# - L2gradient=True: 使用 L2 范数计算图像梯度,更准确
img_Canny1 = cv2.Canny(img_Guss1, ret2, ret1, L2gradient=True) # 显示原始图像
cv2.imshow('img', img)
# 显示 Canny 边缘检测后的图像
cv2.imshow('img_Canny1', img_Canny1)
# 等待用户按下键盘上的任意键
cv2.waitKey(0)
5.2、无二值化
import cv2img = cv2.imread('lenda01.png')# 将图像从BGR颜色空间转换为灰度图像
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 使用全局阈值进行二值化处理
# - ret1: 计算得到的阈值 (127)
# - img_threshold1: 二值化后的图像,像素值大于127设置为255,否则设置为0
ret1, img_threshold1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)# 使用 Otsu's 阈值法进行二值化处理,并进行反转
# - ret2: Otsu's算法计算得到的阈值
# - img_threshold2: 二值化后的图像,像素值小于阈值设置为255,否则设置为0
ret2, img_threshold2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY_INV)# 对灰度图像进行高斯模糊处理,以减少噪声
# - (5, 5): 高斯核的大小
# - sigmaX=1.5: X方向上的高斯核标准差
img_Guss2 = cv2.GaussianBlur(img_gray, (5, 5), sigmaX=1.5)# 使用 Canny 边缘检测算法提取图像的边缘
# - img_Guss2: 输入图像(高斯模糊后的灰度图像)
# - ret2: 低阈值,用于边缘检测的阈值下限
# - ret1: 高阈值,用于边缘检测的阈值上限
# - L2gradient=True: 使用 L2 范数计算图像梯度,更准确
img_Canny2 = cv2.Canny(img_Guss2, ret2, ret1, L2gradient=True)# 显示原始图像
cv2.imshow('img', img)
# 显示 Canny 边缘检测后的图像
cv2.imshow('img_Canny2', img_Canny2)
# 等待用户按下键盘上的任意键
cv2.waitKey(0)
```
六、库函数
Canny()
使用 Canny 算法查找图像中的边缘
该函数在输入图像中查找边缘,并使用 Canny 算法在输出映射边缘中标记它们。threshold1 和 threshold2 之间的最小值用于 Edge 链接。最大值用于查找强边缘的初始分段。查看 http://en.wikipedia.org/wiki/Canny_edge_detector
cv.Canny( image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]] ) -> edges
cv.Canny( dx, dy, threshold1, threshold2[, edges[, L2gradient]] ) -> edges
方法 | 描述 |
---|---|
image | 8 位输入图像。 |
edges | 输出边缘映射;单通道 8 位图像,其大小与 图像 相同。 |
threshold1 | 磁滞过程的第一个阈值。 |
threshold2 | 滞后程序的第二个阈值。 |
apertureSize | 孔径大小。 |
L2gradient | ![]() |
dx | 输入图像的 16 位 x 导数(CV_16SC1 或 CV_16SC3) |
dy | 输入图像的 16 位 y 导数(与 dx 类型相同)。 |
相关文章:
Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)
一、 高斯滤波 边缘检测本身属于锐化操作,对噪点比较敏感,所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。 二、计算图像的梯度和方向 三、非极大值抑制 在得到每个边缘的方向之后,其实把它们连起来边缘检测就算完了…...
超微服务器主板重置ipmi登录密码
超微服务器主板重置ipmi登录密码 超微服务器的ipmi登录密码不对,需要重置但是bios内并没有找到可以设置的选项。 以下是解决办法: 安装IPMITOOL apt install ipmitool -y执行以下命令加载模块: modprobe ipmi_watchdog modprobe ipmi_po…...
【react18】react项目使用mock模拟后台接口
前后端分离项目,后端还没有接口的时候,前端可以使用mockjs的技术实行假数据的模拟。这里使用的是mock的库msw实现这个业务. MSW msw是mock的工具,官网地址是在这里 使用步骤 1.安装msw npm install mswlatest --save-dev2.新建存放mock接…...
阿里云国际站代理商:如何通过Serverless调用GPU资源?
1.采用支持GPU资源的Serverless系统 选择支持GPU资源的Serverless系统,如Dilu系统,它通过内省弹性(introspectiveelasticity)机制,提供细粒度和自适应的二维协同扩展机制,支持GPU资源按需分配。 2.系统…...
CI/CD(三) 安装nfs并指定k8s默认storageClass
一、NFS 服务端安装(主节点 10.60.0.20) 1. 安装 NFS 服务端 sudo apt update sudo apt install -y nfs-kernel-server 2. 创建共享目录并配置权限 sudo mkdir -p /data/k8s sudo chown nobody:nogroup /data/k8s # 允许匿名访问 sudo chmod 777 /dat…...
Ae 效果详解:音频波形
Ae菜单:效果/生成/音频波形 Generate/Audio Waveform 音频波形 Audio Waveform效果可以可视化音频信号,能以多种方式显示音频波形,包括沿开放或闭合的蒙版路径显示。 本效果适用于所有色深模式(8-bpc、16-bpc、32-bpc)…...
S7-1200对V90 PN进行位置控制的三种方法
S7-1200系列PLC通过PROFINET与V90 PN伺服驱动器搭配进行位置控制,实现的方法主要有以下三种: ? 方法一、在PLC中组态位置轴工艺对象,V90使用标准报文3,通过MC_Power、MC_MoveAbsolute等PLC Open标准程序块进行控制, 这种控制方式属于中央控制方式(位置控制在PLC中计算,驱…...
定制表单排序,react, sort
概要 在实际开发中,我们常常碰到,一个页面根据条件不同,其展示的表单项需要动态改变位置;但是又不想写重复代码;可以试一下以下方法; 效果 使用的技术 HtmlReact,useMemoES6的扩展运算 代码 import Re…...
Vue3中keep-alive缓存组件应用场景。
文章目录 一、KeepAlive是什么?二、基本使用1.例子2.keep-alive使用 三、其他属性3.1 包含/排除3.2 最大缓存实例数3.3 缓存实例的生命周期 总结 一、KeepAlive是什么? 是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例…...
测试用例`
1.什么是测试用例 测试⽤例(Test Case)是为了实施测试⽽向被测试的系统提供的⼀组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素. 2.测试用例的万能公式(重点) 设计测试⽤例的万能公式: 功能测试界…...
React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误
大白话React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误 在 React 里,错误边界就像是一个“小卫士”,专门负责在组件出现错误时挺身而出,避免整个应用因为一个小错误就崩溃掉。接下来我会详…...
往期项目shader着色器实践效果应用合集
1、管路混色 2、水管水流效果 3、水管流入到流完效果 4、加热冷却 两 色混色 示意 XX、毒蘑菇测试效果...
go-zero: sqlx 对timestamp 格式数据问题
1.问题背景 对于goctl自动生成的model代码文件,对于非null的时间数据列,一定会产生如下问题 deleted_at\": unsupported Scan, storing driver.Value type \u003cnil\u003e into type *time.Time" 例如以上的问题,不论是插入还…...
systemd-networkd 的 *.network 配置文件详解 笔记250323
systemd-networkd 的 *.network 配置文件详解 笔记250323 查看官方文档可以用 man systemd.network命令, 或访问: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html 名称 systemd.network — 网络配置 概要 network.network 描述 一个纯…...
Axure项目实战:智慧城市APP(四)医疗信息(动态面板、选中交互应用)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:智慧城市APP医疗信息模块 主要内容:医疗信息模块原型设计与交互 应用场景:医疗信息行业 案例展示: 案例视频&…...
机器学习正则化技术:Ridge、Lasso与ElasticNet全解析
机器学习中的正则化技术 在机器学习中,正则化技术(如 Ridge 和 Lasso)主要用于解决过拟合问题,通过限制模型复杂度提高泛化能力。以下是详细说明及实例代码: 一、正则化解决的问题 过拟合:模型在训练集表…...
【汽车传感系统架构:借助传感获取安全】
为了将车辆自动化提升到一个新的水平,设计人员研究了 LiDAR 等传感器选项的权衡,并着眼于传感系统架构。 本文引用地址:https://www.eepw.com.cn/article/202503/468584.htm 每年,约有 120 万人死于道路交通事故,还有…...
3.25-2request库
request库 一、介绍request库 (1)requests是用python语言编写的简单易用的http库,用来做接口测试的库; (2)接口测试自动化库有哪些? requests、urllib 、urllib2、urllib3、 httplib 等&…...
LangChain4j(1):初识LangChain4j
1 什么是LangChain和LangChain4j LangChain是一个大模型的开发框架,使用LangChain框架,程序员可以更好的利用大模型的能力,大大提高编程效率。如果你是一个lava程序员,那么对LangChain最简单直观的理解就是,LangChain…...
UMI-OCR Docker 部署
额外补充 Docker 0.前置条件 部署前,请检查主机的CPU是否具有AVX指令集 lscpu | grep avx 输出如下即可继续部署 Flags: ... avx ... avx2 ... 1.下载dockerfile wget https://raw.githubusercontent.com/hiroi-sora/Umi-OCR_runtime_linux/main/Do…...
python每日十题(9)
外存储器的容量一般都比较大,而且大部分可以移动,便于在不同计算机之间进行信息交流。外存储器中数据被读入内存储器后,才能被CPU读取,CPU不能直接访问外存储器。本题答案为A选项。 进程是指一个具有一定独立功能的程序关于某个数…...
Jenkins最新版,配置Gitee私人令牌和Gitee凭证
jenkins 配置Gitee私人令牌和凭证 jenkins 版本:Jenkins 2.492.2 Gitee配置 Jenkins配置gitee插件,需要先申请gitee私钥。 安装gitee插件 申请Gitee私人令牌,后面还需要添加凭证。 测试链接,并保存 配置凭证...
AI 生成内容(AIGC):从文本到视频的完整流程
近年来,AI 生成内容(AIGC, AI-Generated Content) 迅速发展,从文本、图片到音频、视频,AI 在创意内容生成方面展现出了惊人的能力。AIGC 不仅提升了内容创作效率,还降低了成本,使得普通用户也能…...
【漏洞复现】Apache Tomcat partial PUT文件上传反序列化漏洞复现(CVE-2025-24813)
❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 0x00 免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用;任何个人/组织须在合法合规…...
Spring JDBC Template与事务管理:基于XML与注解的实战指南
摘要 本文深入解析Spring JDBC Template与事务管理的核心技术,结合XML配置与注解方式两种主流方案,通过转账案例完整演示数据库操作与事务管理的最佳实践。文章涵盖JDBC Template的核心用法、事务配置语法、常见问题及性能优化建议,帮助开发…...
自动化测试selenium(Java版)
1.准备工作 1.1.下载浏览器 自动化测试首先我们要准备一个浏览器,我们这里使用谷歌(chrome)浏览器. 1.2.安装驱动管理 每一个浏览器都是靠浏览器驱动程序来启动,但是浏览器的版本更新非常快,可能我们今天测试的是一个版本,第二天发布了一个新的版本,那么我们就要重构代码,很…...
【13】Ajax爬取案例实战
目录 一、准备工作 二、爬取目标 三、初步探索:如何判断网页是经js渲染过的? 四、爬取列表页 4.1 分析Ajax接口逻辑 4.2 观察响应的数据 4.3 代码实现 (1)导入库 (2)定义一个通用的爬取方法…...
tar包部署rabbitMQ
部署erlang: 有网使用: sudo apt-get update sudo apt-get install libncurses5-dev libncursesw5-dev sudo yum install ncurses-devel 无网使用 tar zxvf ncurses.tar.gz mkdir ncurses cd ncurses-6.3/ ./configure --with-shared --without-debu…...
SpringMVC请求与响应深度解析:从核心原理到高级实践
一、SpringMVC架构与核心组件剖析 SpringMVC是基于Java的MVC设计模型实现的轻量级Web框架,其核心架构围绕前端控制器模式构建。以下是核心组件及其作用: DispatcherServlet 作为前端控制器,所有请求首先到达此处。它负责请求分发、协调组件协…...
CentOS 8 安装 Redis 全流程指南:从基础部署到远程安全配置
一、环境准备 本文以 CentOS 8.5 为例,演示 Redis 的安装、密码设置及远程连接配置。在开始前,请确保: 已通过 SSH 连接至服务器(建议使用 Root 权限)系统已联网基础工具包已安装:sudo dnf update -y &am…...
【机器学习】使用Python Spark MLlib进行预测模型训练
Spark MLlib 是 Spark 的机器学习 (ML) 库。它的目标是使实用的机器学习变得可扩展且易于使用。从高层次上讲,它提供了以下工具: ML 算法:常见的学习算法,如分类、回归、聚类和协同过滤特征化:特征提取、转换、降维和…...
简单聊聊Oracle和MySQL数据库的区别和使用场景
对于IT的技术人员,MySQL是非常熟悉的开源数据库,在各个行业被广泛应用。但是对于Oracle数据库,很多专业的IT从业人员不太了解,今天就来聊一聊Oracle和MySQL的一些区别。 1. 使用场景 首先MySQL是在各种IT公司或者非IT公司广泛应用…...
qt QOffscreenSurface详解
1、概述 QOffscreenSurface 是 Qt 中用于离屏渲染的一个类。它允许在不直接与屏幕交互的情况下进行 OpenGL 渲染操作,常用于生成纹理、预渲染场景等。通过 QOffscreenSurface,可以在后台创建一个渲染表面,进行绘制操作,并将结果捕…...
【软件测试】:软件测试实战
1. ⾃动化实施步骤 1.1 编写web测试⽤例 1.2 ⾃动化测试脚本开发 common public class AutotestUtils {public static EdgeDriver driver;// 创建驱动对象public static EdgeDriver createDriver(){// 驱动对象已经创建好了 / 没有创建if( driver null){driver new EdgeDr…...
springboot使用netty做TCP客户端
1、服务端文档说明 ## 1. 概述本文档描述了Socket模拟器的通信协议实现细节,包括数据包格式、字节序、编码方式等信息。## 2. 通信基础### 2.1 连接方式 - 协议类型:TCP - 网络层:IPv4 (AddressFamily.InterNetwork) - 传输方式:流…...
【NLP 49、提示工程 prompt engineering】
目录 一、基本介绍 语言模型生成文本的基本特点 提示工程 prompt engineering 提示工程的优势 使用注意事项 ① 安全问题 ② 可信度问题 ③ 时效性与专业性 二、应用场景 能 ≠ 适合 应用场景 —— 百科知识 应用场景 —— 写文案 应用场景 —— 解释 / 编写…...
Axure RP设计软件中的各种函数:包括数字、数学、字符串、时间及中继器函数,详细解释了各函数的用途、参数及其应用场景。
文章目录 引言函数分类数字函数数学函数字符串函数时间函数函数中继器函数引言 在axure交互设计时,函数可以用在条件公式和需要赋值的地方,其基本语法是用双方括号包含,变量值和函数用英文句号连接。 在交互事件编辑器中通过fx按钮插入函数表达式,例如设置文本内容为: …...
Logback使用和常用配置
Logback 是 Spring Boot 默认集成的日志框架,相比 Log4j,它性能更高、配置更灵活,并且天然支持 Spring Profile 多环境配置。以下是详细配置步骤及常用配置示例。 一、添加依赖(非 Spring Boot 项目) 若项目未使用 Sp…...
赛季7靶场 -- Code -- HTB writeup(Just hint)
本系列仅说明靶场的攻击思路,不会给出任何的详细代码执行步骤,因为个人觉得找到合适的工具以实现攻击思路的能力也非常重要。 1.首先我们对靶场进行了Nmap扫描,很快我们发现了Web应用端口何SSH端口 2.显然我们无法直接突破ssh,因为…...
第十三届蓝桥杯单片机省赛程序设计试题
目录 试题 各程序块代码 init.c main.c other.h other.c key.c seg.c onewire.c部分 ds1302.c部分 试题 各程序块代码 init.c #include "other.h"void init74hc138(unsigned char n){P2(P2&0x1f)|(n<<5);P2&0x1f; } void init(){P00x00;in…...
【QT】Qt creator快捷键
Qt creator可以通过以下步骤快捷键査看调用关系: 1.打开代码文件。 2.将光标放在你想要查看调用关系的函数名上。 3.按下键盘快捷键 CtrlshiftU。 4.弹出菜单中选择“调用路径”或“被调用路径” 5.在弹出的窗口中可以查看函数的调用关系 折叠或展开代码快捷键&…...
Flask接口开发--GET接口
安装Flask 1.安装命令: pip3 install Flask2.查看Flask版本: pip3 show flask如图我的Flask版本号是2.0.3 项目创建 1、在PyCharm中,我们点击左上方的 file,选择 New Project,创建一个Flask项目。(Py…...
爬虫豆瓣电影
以下是一个简单的使用 requests 和 BeautifulSoup 库来爬取网页标题的 Python 爬虫示例代码,以爬取豆瓣电影 Top250 首页为例(注意遵守网站的 robots.txt 协议,不要过度爬取给网站造成负担): 首先确保你已经安装了 re…...
[ ] 前后端连接 结合常见故障场景和解决
调试流程图: 一、基础网络检查 IP与端口验证 确认前端请求的URL与后端实际运行的IP和端口完全一致(如http://192.168.1.100:8080/api)使用ping命令测试网络连通性,telnet检查端口是否开放: telnet 192.168.1.100 80…...
MyBatis-Plus 的加载及初始化
在 Spring Boot 启动过程中,MyBatis-Plus 的加载和初始化涉及多个阶段的工作。这些工作包括 MyBatis-Plus 自身的配置解析、Mapper 接口的扫描与注册、SQL 语句的动态注入以及底层 MyBatis 的初始化等。以下是对整个过程的详细分析: 1. Spring Boot 启动…...
LangChain开发(九)基于Rag实现文档问答
文章目录 关联阅读Rag是什么?Rag工作流索引(Indexing)检索和生成(Retrieval and generation) 文档问答实现流程代码实现 源码地址参考资料 关联阅读 LangChain开发(一)LangChain介绍和对话demo…...
Netty——TCP 粘包/拆包问题
文章目录 1. 什么是 粘包/拆包 问题?2. 原因2.1 Nagle 算法2.2 滑动窗口2.3 MSS 限制2.4 粘包的原因2.5 拆包的原因 3. 解决方案3.1 固定长度消息3.2 分隔符标识3.3 长度前缀协议3.3.1 案例一3.3.2 案例二3.3.3 案例三 4. 总结 1. 什么是 粘包/拆包 问题?…...
探索抓包利器ProxyPin,实现手机APP请求抓包,支持https请求
以下是ProxyPin的简单介绍: - ProxyPin是一个开源免费HTTP(S)流量捕获神器,支持 Windows、Mac、Android、IOS、Linux 全平台系统- 可以使用它来拦截、检查并重写HTTP(S)流量,支持捕获各种应用的网络请求。ProxyPin基于Flutter开发࿰…...
【例3.5】位数问题(信息学奥赛一本通-1313)
【题目描述】 在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。 【输入】 读入一个数N(N≤1000)。 【输出】 输出有多少个数中有偶数个数字3。 【输入样例】 2 【输出样例】 73 【题解代码】 #incl…...
python之selenium中的窗口切换
前提:触发一个事件打开一个新的窗口 1,先获取所有的句柄: handles driver.windowhandlers2,获取当前窗口 cururl driver.current_url3,循环遍历所有句柄 for handle in handles:driver.switch_to.window(handle)i…...