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

详解cv2.copyMakeBorder函数【OpenCV图像边界填充Python版本】

文章目录

  • 简介
  • 函数原型
  • 代码示例
  • 参考资料

简介

做深度学习图像数据集时,有时候需要调整一张图片的长和宽。如果直接使用cv2.resize函数会造成图像扭曲失真,因此我们可以采取填充图像短边的方法解决这个问题。cv2.copyMakeBorder函数提供了相关操作。本篇博客详细介绍了cv2.copyMakeBorder使用方法,并给出了代码示例。🚀🚀🚀

函数原型

def copyMakeBorder(src: Any,top: int,bottom: int,left: int,right: int,borderType: int,dst: Any | None = ...,value: Any = ...
)
参数意义
src输入图像
top图像顶部需要填充的边界宽度(单位:像素)
bottom图像底部需要填充的边界宽度(单位:像素)
left图像左侧需要填充的边界宽度(单位:像素)
right图像右侧需要填充的边界宽度(单位:像素)
borderType填充类型
dst输出图像。Python借口一般不用这个参数。
value常量填充是给定的颜色常量值。[0,255]
填充类型解释
cv2.BORDER_CONSTANT常数填充🚀👍:|oooo|abcd|oooo|
cv2.BORDER_ISOLATED使用黑色像素进行填充,同:cv2.BORDER_CONSTANT类型且value=0
cv2.BORDER_REFLECT从外向内取图像边缘的像素填充:|dcba|abcd|dcba|
cv2.BORDER_REFLECT101反射填充的另一种情况,跳过原图边上的一个像素值:|dcb|abcd|cba|
cv2.BORDER_REFLECT_101cv2.BORDER_REFLECT101
cv2.BORDER_DEFAULTcv2.BORDER_REFLECT101
cv2.BORDER_REPLICATE复制图像最边上的像素进行填充:|aaaa|abcd|dddd|
cv2.BORDER_TRANSPARENT这个类型在新的OpenCV4中已经被取消👎
cv2.BORDER_WRAP在图像对侧从外向内取图像边缘的像素填充:|dcba|abcd|abcd|

代码示例

OpenCV中不同方法对Lenna图片进行扩充边界

import cv2
import matplotlib.pyplot as pltlenna = cv2.imread(filename="Lenna.png", flags=cv2.IMREAD_ANYCOLOR)
lenna_constant = cv2.copyMakeBorder(src=lena, top=10, bottom=10, left=20, right=30, borderType=cv2.BORDER_CONSTANT, value=0)
lenna_default = cv2.copyMakeBorder(src=lena, top=10, bottom=10, left=20, right=30, borderType=cv2.BORDER_DEFAULT)
lenna_isolated = cv2.copyMakeBorder(src=lena, top=10, bottom=10, left=20, right=30, borderType=cv2.BORDER_ISOLATED)
lenna_reflect = cv2.copyMakeBorder(src=lena, top=10, bottom=10, left=20, right=30, borderType=cv2.BORDER_REFLECT)
lenna_reflect101 = cv2.copyMakeBorder(src=lena, top=10, bottom=10, left=20, right=30, borderType=cv2.BORDER_REFLECT101)
lenna_reflect_101 = cv2.copyMakeBorder(src=lena, top=10, bottom=10, left=20, right=30, borderType=cv2.BORDER_REFLECT_101)
lenna_replicate = cv2.copyMakeBorder(src=lena, top=10, bottom=10, left=20, right=30, borderType=cv2.BORDER_REPLICATE)
lenna_wrap = cv2.copyMakeBorder(src=lena, top=10, bottom=10, left=20, right=30, borderType=cv2.BORDER_WRAP)fig = plt.figure()
ax1 = fig.add_subplot(3, 3, 1)
ax1.axes.xaxis.set_visible(b=False)
ax1.axes.yaxis.set_visible(b=False)
ax1.spines["top"].set_visible(b=False)
ax1.spines["bottom"].set_visible(b=False)
ax1.spines["right"].set_visible(b=False)
ax1.spines["left"].set_visible(b=False)
ax1.set_title(label="original Lenna")
ax1.imshow(cv2.cvtColor(src=lenna, code=cv2.COLOR_BGR2RGB))ax2 = fig.add_subplot(3, 3, 2)
ax2.axes.xaxis.set_visible(b=False)
ax2.axes.yaxis.set_visible(b=False)
ax2.spines["top"].set_visible(b=False)
ax2.spines["bottom"].set_visible(b=False)
ax2.spines["right"].set_visible(b=False)
ax2.spines["left"].set_visible(b=False)
ax2.set_title(label="cv2.BORDER_CONSTANT")
ax2.imshow(cv2.cvtColor(src=lenna_constant, code=cv2.COLOR_BGR2RGB))ax3 = fig.add_subplot(3, 3, 3)
ax3.axes.xaxis.set_visible(b=False)
ax3.axes.yaxis.set_visible(b=False)
ax3.spines["top"].set_visible(b=False)
ax3.spines["bottom"].set_visible(b=False)
ax3.spines["right"].set_visible(b=False)
ax3.spines["left"].set_visible(b=False)
ax3.set_title(label="cv2.BORDER_DEFAULT")
ax3.imshow(cv2.cvtColor(src=lenna_default, code=cv2.COLOR_BGR2RGB))ax4 = fig.add_subplot(3, 3, 4)
ax4.axes.xaxis.set_visible(b=False)
ax4.axes.yaxis.set_visible(b=False)
ax4.spines["top"].set_visible(b=False)
ax4.spines["bottom"].set_visible(b=False)
ax4.spines["right"].set_visible(b=False)
ax4.spines["left"].set_visible(b=False)
ax4.set_title(label="cv2.BORDER_ISOLATED")
ax4.imshow(cv2.cvtColor(src=lenna_isolated, code=cv2.COLOR_BGR2RGB))ax5 = fig.add_subplot(3, 3, 5)
ax5.axes.xaxis.set_visible(b=False)
ax5.axes.yaxis.set_visible(b=False)
ax5.spines["top"].set_visible(b=False)
ax5.spines["bottom"].set_visible(b=False)
ax5.spines["right"].set_visible(b=False)
ax5.spines["left"].set_visible(b=False)
ax5.set_title(label="cv2.BORDER_REFLECT")
ax5.imshow(cv2.cvtColor(src=lenna_reflect, code=cv2.COLOR_BGR2RGB))ax6 = fig.add_subplot(3, 3, 6)
ax6.axes.xaxis.set_visible(b=False)
ax6.axes.yaxis.set_visible(b=False)
ax6.spines["top"].set_visible(b=False)
ax6.spines["bottom"].set_visible(b=False)
ax6.spines["right"].set_visible(b=False)
ax6.spines["left"].set_visible(b=False)
ax6.set_title(label="cv2.BORDER_REFLECT101")
ax6.imshow(cv2.cvtColor(src=lenna_reflect101, code=cv2.COLOR_BGR2RGB))ax7 = fig.add_subplot(3, 3, 7)
ax7.axes.xaxis.set_visible(b=False)
ax7.axes.yaxis.set_visible(b=False)
ax7.spines["top"].set_visible(b=False)
ax7.spines["bottom"].set_visible(b=False)
ax7.spines["right"].set_visible(b=False)
ax7.spines["left"].set_visible(b=False)
ax7.set_title(label="cv2.BORDER_REFLECT_101")
ax7.imshow(cv2.cvtColor(src=lenna_reflect_101, code=cv2.COLOR_BGR2RGB))ax8 = fig.add_subplot(3, 3, 8)
ax8.axes.xaxis.set_visible(b=False)
ax8.axes.yaxis.set_visible(b=False)
ax8.spines["top"].set_visible(b=False)
ax8.spines["bottom"].set_visible(b=False)
ax8.spines["right"].set_visible(b=False)
ax8.spines["left"].set_visible(b=False)
ax8.set_title(label="cv2.BORDER_REPLICATE")
ax8.imshow(cv2.cvtColor(src=lenna_replicate, code=cv2.COLOR_BGR2RGB))ax9 = fig.add_subplot(3, 3, 9)
ax9.axes.xaxis.set_visible(b=False)
ax9.axes.yaxis.set_visible(b=False)
ax9.spines["top"].set_visible(b=False)
ax9.spines["bottom"].set_visible(b=False)
ax9.spines["right"].set_visible(b=False)
ax9.spines["left"].set_visible(b=False)
ax9.set_title(label="cv2.BORDER_WRAP")
ax9.imshow(cv2.cvtColor(src=lenna_wrap, code=cv2.COLOR_BGR2RGB))plt.show()

参考资料

  1. OpenCV文档:Adding borders to your images
  2. CSDN:图像处理作窗口运算时边界的几种扩展方法(详解OpenCV中的参数borderType)
  3. CSDN:【opencv4.3.0教程】11之调整图像边缘(copyMakeBorder 与 borderInterpolate)

收集整理和创作不易, 若有帮助🉑, 请帮忙点赞👍➕收藏❤️, 谢谢!✨✨🚀🚀

相关文章:

详解cv2.copyMakeBorder函数【OpenCV图像边界填充Python版本】

文章目录 简介函数原型代码示例参考资料 简介 做深度学习图像数据集时,有时候需要调整一张图片的长和宽。如果直接使用cv2.resize函数会造成图像扭曲失真,因此我们可以采取填充图像短边的方法解决这个问题。cv2.copyMakeBorder函数提供了相关操作。本篇…...

前端技术-并发请求

并发请求 代码解释 定义了一个函数 concurRequest,用于并发请求多个 URL 并返回它们的响应结果。 function concurRequest(urls, maxNum) {return new Promise((resolve, reject) > {if (urls.length 0) {resolve([]);return;}const results [];let index …...

面试题-React(十三):React中获取Refs的几种方式

一、Refs的基本概念 Refs是React提供的一种访问DOM元素或组件实例的方式。通过Refs,我们可以在React中获取到底层的DOM节点或组件实例,并进行一些操作。Refs的使用场景包括但不限于:访问DOM属性、调用组件方法、获取输入框的值等。 二、获取…...

Linux CentOS 7升级curl8.4.0使用编译安装方式

1、查看当前版本 # curl --version curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.19.1 Basic ECC zlib/1.2.7 libidn/1.28 libssh2/1.4.3 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp scp sftp smtp smtps tel…...

探寻JWT的本质:它是什么?它有什么作用?

JWT(JSON Web Token)是一种基于 JSON 格式的轻量级令牌(token)协议,它被广泛应用于网络应用程序的身份验证和授权。相较于传统的 session-based 认证机制,JWT 具有更好的扩展性和互操作性,同时也…...

关于雅思听力答案限定字数的解释。

1. No more than three words and/or a number:31,可以填3/2/1个单词;1个数字;3/2/1个单词1个数字 2. No more than three words and/or numbers:3n,可以填3/2/1个单词;n个数字;3/2…...

化工python | CSTR连续搅拌反应器系统

绝热连续搅拌釜反应器 (CSTR) 是过程工业中常见的化学系统。 容器中发生单个一级放热且不可逆的反应 A → B,假定容器始终完全混合。 试剂 A 的入口流以恒定的体积速率进入罐。 产物流B以相同的体积速率连续排出,液体密度恒定。 因此,反应液体的体积是恒定的。 在反应器中发…...

交通物流模型 | 基于自监督学习的交通流预测模型

交通物流模型 | 基于自监督学习的交通流预测模型 在智能交通系统中,准确预测不同时间段的城市交通流量是至关重要的。现有的方法存在两个关键的局限性:1、大多数模型集中预测所有区域的交通流量,而没有考虑空间异质性,即不同区域的交通流量分布可能存在偏差;2、现有模型无…...

343. 整数拆分 96.不同的二叉搜索树

343. 整数拆分 设dp[i]表示拆分 数字i 出来的正整数相乘值最大的值 (i - j) * j,和dp[i - j] * j是获得dp[i]的两种乘法,在里面求最大值可以得到当前dp[i]的最大值,但是这一次的得出的最大值如果赋值给dp[i],可能没有没赋值的dp[i]大&#…...

Vue3理解(9)

侦听器 1.计算属性允许我们声明性地计算衍生值,而在有些情况下,我们需要状态变化时执行一些方法例如修改DOM。 2.侦测数据源类型,watch的第一个参数可以市不同形式的‘数据源’,它可以市一个ref(包括计算属性),一个响应式对象&…...

CRM系统中的销售漏斗有什么作用?

随着数字化发展,越来越多的企业使用CRM销售管理系统提高销售管理水平,提升盈利能力。在这个过程中,销售漏斗起到了非常重要的作用。下面就来说说,CRM系统中的销售漏斗有什么作用? 一、销售数据可视化 CRM销售漏斗通过…...

项目(模块1:用户登陆流程分析)

验证登陆点流程...

2023年中国商用服务机器人行业发展概况分析:国产机器人厂商向海外进军[图]

商用服务机器人指在非制造业的商用服务场景中,用来替代或辅助人类进行服务性质工作的机器人;常见的商用场景中,商用服务机器人主要分为终端配送类机器人,商用清洁类机器人,引导讲解类机器人等,被广泛应用在…...

千兆光模块和万兆光模块的适用场景有哪些

随着数字化和物联网的普及,对网络速度和带宽的要求也越来越高。千兆光模块和万兆光模块是两种常见的光模块,在不同的应用场景中,它们各具优势。下面我们来探讨一下千兆光模块和万兆光模块的主要适用场景。 首先是企业网络。千兆光模块常用于…...

2 files found with path ‘lib/armeabi-v7a/liblog.so‘ from inputs:

下图两个子模块都用CMakeLists.txt引用了android的log库,编译后,在它们的build目录下都有liblog.so的文件。 四个CPU架构的文件夹下都有。 上层模块app不能决定使用哪一个,因此似乎做了合并,路径就是报错里的哪个路径&#xff0c…...

qt中json类

目录 QJsonValue QJsonObject QJsonArray QJsonDocument 案例: Qt 5.0开始提供了对Json的支持,我们可以直接使用Qt提供的Json类进行数据的组织和解析,下面介绍4个常用的类。 QJsonValue 该类封装了JSON支持的数据类型。 布尔类型&#xf…...

NeurIPS 2023 | AD-PT:首个大规模点云自动驾驶预训练方案

概要 自动驾驶领域的一个长期愿景是,感知模型能够从大规模点云数据集中学习获得统一的表征,从而在不同任务或基准数据集中取得令人满意的结果。之前自监督预训练的工作遵循的范式是,在同一基准数据集上进行预训练和微调,这很难实…...

设计模式-结构型模式

文章目录 一、代理模式1.静态代理2.JDK动态代理3.CGLib动态代理4.三种代理对比 二、适配器模式1.类适配器模式2.对象适配器模式 三、装饰者模式静态代理和装饰者的区别 四、桥接模式五、外观模式六、组合模式七、享元模式 结构性模式描述如何将类或对象按某种布局组成更大的结构…...

BUUCTF学习(7): 随便注,固网杯

1、介绍 2、解题 11;show tables;# select * from 1919810931114514 concat(sel,ect from 1919810931114514 ) PEREPARE y from sql; ECCUTE y; -1; sEt sql CONCAt(se,lect * from 1919810931114514;); prePare stmt from sql; EXECUTE stmt; # 结束...

【文末福利】巧用Chat GPT快速提升职场能力:数据分析与新媒体运营

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…...

院内导航系统厂商分析

随着医疗技术的不断发展和医院规模的不断扩大,院内导航系统成为了现代化医院不可或缺的一部分。患者就医时,一个高效便捷的导航系统可以帮助他们快速找到目标科室,同时也能提高医院的整体运营效率。本文将推荐五家在院内导航市场具有竞争力的…...

MES系统作业调度

一、MES系统作业调度的概念和功能 作业调度是指在制造过程中,根据生产计划和实际情况,合理安排和调度各项任务和资源,以达到最佳的生产效率和资源利用率。MES系统作业调度功能涉及以下方面: 1. 任务计划与分配:MES系…...

C++入门-引用

C入门-引用 前置知识点:函数栈帧的复用前置知识点:类型转换时产生的临时变量1.含义2.代码形式3.引用的价值1.传参数传参效率测试补充:C与Java中引用的区别 2.引用做返回值(前置知识:栈帧复用)1.传值返回2.传引用返回传引用返回并用引用接收3.静态变量传引用返回4.引用做返回值真…...

问题:Qt中软件移植到笔记本中界面出现塌缩

这是由于软件之前运行的设备DPI较低,移植到笔记本中显示设备DPI较高,导致窗体显示进行了缩放。 解决方案,在main.cpp中加入以下代码: if(QT_VERSION>QT_VERSION_CHECK(5,6,0)) QCoreApplication::setAttribute(Qt::AA_EnableHi…...

NDK编译脚本:Android.mk or CMakeLists.txt

本文来自于:https://github.com/xufuji456/FFmpegAndroid/blob/master/doc/NDK_compile_shell.md 前言 Android NDK以前默认使用Android.mk与Application.mk进行构建,但是在Android Studio2.2之后推荐使用CMake进行编译。 CMake是跨平台编译工具&#…...

低代码提速应用开发

低代码介绍 低代码平台是指一种能够帮助企业快速交付业务应用的平台。自2000年以来,低代码市场一直充斥着40大大小小的各种玩家,比如国外的Appian、K2、Pega Systems、Salesforce和Ultimus,国内的H3 BPM。 2015年以后,这个市场更是…...

Hi3516DV500 SVP_NNN添加opencv库记录

默认没有带opencv库,但是实际项目中需要用到opencv库,因此添加一下此库; 1:编译opencv源码,这里具体可以参考 海思Hi3516移植opencv以及错误调试_海思hi3516摄像头开发-CSDN博客 2:在工程的根目录下新建…...

BIO实战、NIO编程与直接内存、零拷贝深入剖析

原生 JDK 网络编程 BIO BIO,意为 Blocking I/O,即阻塞的 I/O。   BIO 基本上就是我们上面所说的生活场景的朴素实现。在 BIO 中类 ServerSocket 负责绑定 IP 地址,启动监听端口,等待客户连接;客户端 Socket 类的实例…...

计网第六章(应用层)(四)(电子邮件)

电子邮件采用客户/服务器的方式。 1、三个构成 电子邮件系统的三个组成构件:用户代理、邮件服务器以及电子邮件所需的协议。 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件。 邮件服务器是电子邮件系统的基础设施。因特网上所有的服…...

Lua篇笔记

. 和 : 的区别 lua的面向对象 Lua数据类型 nil number bool table string userdata thread function Lua-字符串连接 C#与Lua交互过程及原理 Lua中的闭包 常见的一些Lua功能 热重载: function reload_module(module_name) local old_module _G[module_name] --取…...

一种更具破坏力的DDoS放大攻击新模式

近日,内容分发网络(CDN)运营商Akamai表示,一种使网站快速瘫痪的DDoS放大攻击新方法正在被不法分子所利用。这种方法是通过控制数量巨大的中间设备(middlebox,主要是指配置不当的服务器)&#xf…...

WordPress 常规设置页面调用媒体中心上传图片插入URL(新版可用)

首先,我们需要在主题或插件文件夹中创建一个 JavaScript 文件(如:media-uploader.js),该文件中包含如下代码。 /*** 媒体中心上传 js **/ jQuery(document).ready(function($){var mediaUploader;$(#upload_image_but…...

Elasticsearch实现检索词自动补全(检索词补全,自动纠错,拼音补全,繁简转换) 包含demo

Elasticsearch实现检索词自动补全 自动补全定义映射字段建立索引测试自动补全 自动纠错查询语句查询结果 拼音补全与繁简转换安装 elasticsearch-analysis-pinyin 插件定义索引与映射建立拼音自动补全索引测试拼音自动补全测试繁简转换自动补全 代码实现demo结构demo获取 自动补…...

LaunchView/启动页 的实现

1. 创建启动画板,LaunchScreen.storyboard 添加组件如图: 2. 项目中设置只支持竖屏,添加启动画板,如图: 3. 创建启动画面动画视图,LaunchView.swift import SwiftUI/// 启动视图 struct LaunchView: View {/// 字符串转换为字符串…...

windows安装npm教程

在安装和使用NPM之前,我们需要先了解一下,NPM 是什么,能干啥? 一、NPM介绍 NPM(Node Package Manager)是一个用于管理和共享JavaScript代码包的工具。它是Node.js生态系统的一部分,广泛用于构…...

网络端口验证

网络端口连通性验证 1、背景2、目标3、环境4、部署4.1、准备工作4.2、安装4.3、场景测试 1、背景 在日常运维过程中经常会遇到以下两种场景: 1、程序业务端口的开具及验证 2、业务程序访问异常网络排障 2、目标 1、验证端口的正确开具 2、网络策略的连通性 3、环…...

MongoDB 索引和常用命令

一、基本常用命令 1.1 案例需求 存放文章评论的数据存放到 MongoDB 中,数据结构参考如下,其中数据库为 articledb, 专栏文章评论 comment 字段名称 字段含义 字段类型 备注 _id ID ObjectId或String Mongo的主键的字段 articlei…...

【超详细】win10安装docker

win10安装docker 因为要在win10复现一个CVE漏洞,需要用到docker所以特地自己亲自安装了一下,其实在win10上安装docker与在Linux上面的原理一致,都是将docker安装在虚拟机里,不同的是win10是安装在Hyper-V虚拟机上的,需…...

JVM调优(一)

什么时候会有内存泄漏,怎么排查? 答: 首先内存泄漏是堆中的一些对象不会再被使用了,但是无法被垃圾收集器回收,如果不进行处理,最终会导致抛出 java.lang.OutOfMemoryError 异常。 内存泄露: …...

Parallels Desktop 19中文-- PD19最新安装

Parallels Desktop 19可以让我们在Mac电脑上运行Windows和其他操作系统,而无需重启计算机。这款软件的稳定性较高,能够在Mac上同时运行多个操作系统,如Windows、Linux等,而无需重启电脑。它可以让用户无缝地在不同操作系统之间切换…...

【c++】向webrtc学比较1:AheadOf、IsNewerTimestamp

webrtc源码分析-rtp序列号新旧比较 大神文章分析的非常到位。大神分析:AheadOrAt(a, b)是判断a是否比b新的核心,其原理是这样的:rfc1982规定了序列号递增间隔不能超过取值范围的1/2(这是自己理解的),那么要判断a是否比b新,只要判断b到a的递增是否在1/2即可,递增超过1/2,…...

华为云云耀云服务器L实例评测|企业项目最佳实践之docker部署及应用(七)

华为云云耀云服务器L实例评测|企业项目最佳实践系列: 华为云云耀云服务器L实例评测|企业项目最佳实践之云服务器介绍(一) 华为云云耀云服务器L实例评测|企业项目最佳实践之华为云介绍(二) 华为云云耀云服务器L实例评测&#xff5…...

MAC上使用Wireshark常见问题

文章目录 介绍正文启动异常-Permission denied解决方法 过滤协议和地址指定源地址和目的地址调整 time format 介绍 简单记录Wireshark在日常使用过程中的遇到的小case。 正文 Wireshark相较于tcpdump使用较为简单,交互也更为友好。 点击Start即可启动抓包 启动…...

在C++中++a和a++有什么区别?

2023年10月16日,周一中午 a和a在语义上的区别 a是先进行运算(增加1),然后返回新值。 a是先返回原值,然后进行运算(增加1)。 a和a在效率上的区别 a直接返回新值,不需要临时变量保存原值。 而a需要先返回原值,然后再进行增加1的操作。这需要使用一个临时变量来保存…...

NewStarCTF2023公开赛道-压缩包们

题目提示是压缩包 用010editor打开,不见PK头,补上50 4B 03 04 14 00 00 00 将文件改成.zip后缀,打开,解压出flag.zip 尝试解压,报错 发现一串base64编码 SSBsaWtlIHNpeC1kaWdpdCBudW1iZXJzIGJlY2F1c2UgdGhleSBhcmUgd…...

oracle数据库增加表空间数据文件

查询数据文件:select * from dba_data_files order by file_name; 增加:alter tablespace 数据库名 add datafile data size 34359721984;...

【08】基础知识:React中收集表单数据(非受控组件和受控组件)

一、概念 非受控组件: 页面中所有输入类的 DOM,现用现取。 给组件绑定 ref 属性,在需要时通过 ref 获取相应值。 受控组件: 页面中所有输入类的 DOM,随着输入,将内容维护到状态 state中,当…...

数据结构之堆排序和前,中,后,层序遍历,链式二叉树

首先我们要知道升序我们要建小堆,降序建大堆,这与我们的大多人直觉相违背。 因为我们大多数人认为应该将堆顶的数据输出,但如果这样就会导致堆顶出堆以后,堆结构会被破坏,显然我们不能这样。 所有我们反其道而行&…...

多线程中ThreadPoolExecutor.map()中传递多个参数

with concurrent.futures.ThreadPoolExecutor(max_threads) as executor:results executor.map(get_captcha_image, ip_addrs, [img_url] * len(ip_addrs)) #要传入多个参数时,每个参数都得是固定相同长度的可迭代对象# 收集结果for result in results:print(resul…...

linux centos7 环境下 no such file or directory

目录 1.问题描述2.主要原因2.1修改后代码2.2修改前代码 总结参考 1.问题描述 预览excel文件时无法找到对应的html文件 2.主要原因 异常原因:代码获取的是系统的tmp文件,但是linux环境环境中心tmp目录是没有权限的,所以不能获取系统的根目录…...