OpenCV实现基于交叉双边滤波的红外可见光融合算法
1 算法原理
CBF是*Cross Bilateral Filter(交叉双边滤波)*的缩写,论文《IMAGE FUSION BASED ON PIXEL SIGNIFICANCE USING CROSS BILATERAL FILTER》。
论文中,作者使用交叉双边滤波算法对原始图像 A A A, B B B 进行处理得到细节(detail)层,通过细节层得到权重系数,最后经过权重系数对原始图像 A A A, B B B进行融合,得到最终的输出图像 F F F 。
2 算法实现
2.1 交叉双边滤波算法
双边波算法是局部的,非线性、非迭代的方法,使用高斯滤波器和颜色滤波器来对图像进行处理, 兼具平滑和保持边界的功能。这在我之前的专栏中有提到过,我在这就不在细说双边滤波,接下来说一下文中提到的交叉双边滤波。
交叉双边滤波算法考虑了 A A A图像的灰度层的相似性和几何层的闭合性来对 B B B 图像进行过滤,或者使用 B B B图像来对 A A A 图像进行过滤,输入为 A A A, B B B 两幅输入图像,假设使用 A A A 图像对 B B B图像进行过滤,论文中 σ s = 1.8 , σ r = 25 \sigma_s=1.8,\sigma_r=25 σs=1.8,σr=25 ,CBFlv滤波窗口大小为 11 ∗ 11 11*11 11∗11 那么:
B C B F ( p ) = 1 W ∑ q ∈ S ( e − ∣ p − q ∣ 2 2 σ s 2 ∗ e − ∣ A ( p ) − A ( q ) ∣ 2 2 σ r 2 ∗ B ( q ) ) B_{CBF}(p)=\frac{1}{W}\sum_{q\in S}(e^{-\frac{|p-q|^2}{2\sigma_s^2}}*e^{-\frac{|A(p)-A(q)|^2}{2\sigma_r^2}}*B(q)) BCBF(p)=W1q∈S∑(e−2σs2∣p−q∣2∗e−2σr2∣A(p)−A(q)∣2∗B(q))
W = ∑ q ∈ S e − ∣ p − q ∣ 2 2 σ s 2 ∗ e − ∣ A ( p ) − A ( q ) ∣ 2 2 σ r 2 W=\sum_{q\in S}e^{-\frac{|p-q|^2}{2\sigma_s^2}}*e^{-\frac{|A(p)-A(q)|^2}{2\sigma_r^2}} W=q∈S∑e−2σs2∣p−q∣2∗e−2σr2∣A(p)−A(q)∣2
同理,对于 A C B F ( p ) A_{CBF}(p) ACBF(p) 使用的是 B B B图像来对 A A A 图像进行过滤,由 $B_{CBF}、 A_{CBF} $以及原始图像 A A A 、 B B B ,在原始图像的基础上减去交叉双边滤波得到的图像就是细节层图像,
A D = A − A C B F , B D = B − B C B F A_D=A-A_{CBF},B_D=B-B_{CBF} AD=A−ACBF,BD=B−BCBF
文中作者给出交叉双边滤波有用的解释是:在多聚焦图像中, A A A 图像未聚焦的区域在图像 B B B 中是聚焦的区域,对图像 B B B 进行交叉双边滤波会使得对图像 B B B 的聚焦区域平滑的比图像 B B B 的非聚焦区域更强,原因是:图像 A A A 中的非聚焦区域由相近的颜色会使得过滤器更像是高斯过滤器。
最上面两幅为原始图像,中间两幅为CBF滤波后的图像,最下面两幅就是由原始图像-CBF图像得到的图像
2.2基于像素的融合策略
接下来的一步是使用细节图像计算融合权重。
选定窗口大小为 w ∗ w w∗w w∗w(论文中使用 5 ∗ 5 5*5 5∗5),来方便计算权重,这个窗口划过的区域看做矩阵 $C_h{i,j}C_h{i,j} $的无偏估计:
c o v a r i a n c e ( X ) = E [ ( X − E [ X ] ) ( X − E ( X ) ) T ] covariance(X)=E[(X-E[X])(X-E(X))^T] covariance(X)=E[(X−E[X])(X−E(X))T]
C h i , j = ∑ k = 1 w ( x k − x ˉ ) ( x k − x ˉ ) T w − 1 C_h^{i,j}=\frac{\sum_{k=1}^w(x_k-\bar{x})(x_k-\bar{x})^T}{w-1} Chi,j=w−1∑k=1w(xk−xˉ)(xk−xˉ)T
得到 C h i , j C_h^{i,j} Chi,j 大小为 w ∗ w w*w w∗w,然后计算矩阵 C h i , j C_h^{i,j} Chi,j 的特征值,并且将这些特征值相加就得到了水平方向区域细节强度,并记为 H d e t a i l S t r e n g t h HdetailStrength HdetailStrength :
H d e t a i l S t r e n g t h ( i , j ) = ∑ k = 1 w e i g e n k HdetailStrength(i,j)=\sum_{k=1}^weigen_k HdetailStrength(i,j)=k=1∑weigenk
同理将 X X X的每一列看做观察量,将 X X X的行看做是变量,计算协方差矩阵 C v i , j C_v^{i,j} Cvi,j,并计算垂直方向区域细节强度 V d e t a i l S t r e n g t h VdetailStrength VdetailStrength :
V d e t a i l S t r e n g t h ( i , j ) = ∑ k = 1 w e i g e n k VdetailStrength(i,j)=\sum_{k=1}^weigen_k VdetailStrength(i,j)=∑k=1weigenk$
最终的权重为,水平和垂直方向的累加和:
w t ( i , j ) = H d e t a i l S t r e n g t ( i , j ) + V d e t a i l S t r e n g t ( i , j ) wt(i,j)=HdetailStrengt(i,j)+VdetailStrengt(i,j) wt(i,j)=HdetailStrengt(i,j)+VdetailStrengt(i,j)
得到 A A A 、 B B B 图像的权重系数后,就可以按照权重系数就行融合:
F ( i , j ) = A ( i , j ) w t a ( i , j ) + B ( i , j ) w t b ( i , j ) w t a ( i , j ) + w t b ( i , j ) F(i,j)=\frac{A(i,j)wt_a(i,j)+B(i,j)wt_b(i,j)}{wt_a(i,j)+wt_b(i,j)} F(i,j)=wta(i,j)+wtb(i,j)A(i,j)wta(i,j)+B(i,j)wtb(i,j)
3 opencv实现代码
import numpy as np
import cv2
import argparse
import mathcov_wsize = 5
sigmas = 1.8
sigmar = 25
ksize = 11def gaussian_kernel_2d_opencv(kernel_size = 11,sigma = 1.8):kx = cv2.getGaussianKernel(kernel_size,sigma)ky = cv2.getGaussianKernel(kernel_size,sigma)return np.multiply(kx,np.transpose(ky)) def bilateralFilterEx(img_r, img_v):#edge solvedwin_size = ksize//2img_r_copy = Noneimg_v_copy = Noneimg_r_copy = cv2.copyTo(img_r, None)img_v_copy = cv2.copyTo(img_v, None)img_r_cbf = np.ones_like(img_r, dtype=np.float32)img_v_cbf = np.ones_like(img_r, dtype=np.float32)img_r_copy = np.pad(img_r_copy, (win_size, win_size), 'reflect')img_v_copy = np.pad(img_v_copy, (win_size, win_size), 'reflect')gk = gaussian_kernel_2d_opencv()for i in range(win_size, win_size+img_r.shape[0]):for j in range(win_size, win_size+img_r.shape[1]):sumr1 = 0.sumr2 = 0.sumv1 = 0.sumv2 = 0.img_r_cdis = img_r_copy[i-win_size:i+win_size+1, j-win_size:j+win_size+1] *1.0- img_r_copy[i,j]*1.0img_v_cdis = img_v_copy[i-win_size:i+win_size+1, j-win_size:j+win_size+1] *1.0- img_v_copy[i,j]*1.0sumr1 = np.sum(np.exp(-img_v_cdis*img_v_cdis) *gk/ (2*sigmar*sigmar) )sumv1 = np.sum(np.exp(-img_r_cdis*img_r_cdis) *gk/ (2*sigmar*sigmar) )sumr2 = np.sum(np.exp(-img_v_cdis*img_v_cdis) *gk*img_r_copy[i-win_size:i+win_size+1, j-win_size:j+win_size+1] *1.0/ (2*sigmar*sigmar) )sumv2 = np.sum(np.exp(-img_r_cdis*img_r_cdis) *gk*img_v_copy[i-win_size:i+win_size+1, j-win_size:j+win_size+1] *1.0/ (2*sigmar*sigmar) )img_r_cbf[i-win_size,j-win_size] = sumr2 / sumr1img_v_cbf[i-win_size,j-win_size] = sumv2 / sumv1return (img_r*1. - img_r_cbf, img_v*1. - img_v_cbf)def CBF_WEIGHTS(img_r_d, img_v_d):win_size = cov_wsize // 2img_r_weights = np.ones_like(img_r_d, dtype=np.float32)img_v_weights= np.ones_like(img_v_d, dtype=np.float32)img_r_d_pad = np.pad(img_r_d, (win_size, win_size), 'reflect')img_v_d_pad = np.pad(img_v_d, (win_size, win_size), 'reflect')for i in range(win_size, win_size+img_r_d.shape[0]):for j in range(win_size, win_size+img_r_d.shape[1]):npt_r = img_r_d_pad[i-win_size:i+win_size+1, j-win_size:j+win_size+1]npt_v = img_v_d_pad[i-win_size:i+win_size+1, j-win_size:j+win_size+1]npt_r_V = npt_r - np.mean(npt_r, axis=0)npt_r_V = npt_r_V*npt_r_V.transpose()npt_r_H = npt_r.transpose() - np.mean(npt_r, axis=1)npt_r_H = npt_r_H*npt_r_H.transpose()npt_v_V = npt_v - np.mean(npt_v, axis=0)npt_v_V = npt_v_V*npt_v_V.transpose()npt_v_H = npt_v.transpose() - np.mean(npt_v, axis=1)npt_v_H = npt_v_H*npt_v_H.transpose()img_r_weights[i-win_size,j-win_size] = np.trace(npt_r_H) + np.trace(npt_r_V) img_v_weights[i-win_size,j-win_size] = np.trace(npt_v_H) + np.trace(npt_v_V) return img_r_weights, img_v_weightsdef CBF_GRAY(img_r, img_v):img_r_d, img_v_d = bilateralFilterEx(img_r, img_v)img_r_weights, img_v_weights = CBF_WEIGHTS(img_r_d, img_v_d)img_fused =(img_r*1. * img_r_weights + img_v*1.*img_v_weights) /(img_r_weights+img_v_weights)img_fused = cv2.convertScaleAbs(img_fused)return img_fuseddef CBF_RGB(img_r, img_v):img_r_gray = cv2.cvtColor(img_r, cv2.COLOR_BGR2GRAY)img_v_gray = cv2.cvtColor(img_v, cv2.COLOR_BGR2GRAY)return CBF_GRAY(img_r_gray, img_v_gray)def CBF(_rpath, _vpath):img_r = cv2.imread(_rpath)img_v = cv2.imread(_vpath)if not isinstance(img_r, np.ndarray) :print('img_r is null')returnif not isinstance(img_v, np.ndarray) :print('img_v is null')returnif img_r.shape[0] != img_v.shape[0] or img_r.shape[1] != img_v.shape[1]:print('size is not equal')returnfused_img = Noneif len(img_r.shape) < 3 or img_r.shape[2] ==1:if len(img_v.shape) < 3 or img_v.shape[-1] ==1:fused_img = CBF_GRAY(img_r, img_v)else:img_v_gray = cv2.cvtColor(img_v, cv2.COLOR_BGR2GRAY)fused_img = CBF_GRAY(img_r, img_v)else:if len(img_v.shape) < 3 or img_v.shape[-1] ==1:img_r_gray = cv2.cvtColor(img_r, cv2.COLOR_BGR2GRAY)fused_img = CBF_GRAY(img_r_gray, img_v)else:fused_img = CBF_RGB(img_r, img_v)cv2.imshow('fused image', fused_img)cv2.imwrite("fused_image_2.jpg", fused_img)cv2.waitKey(0)if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('-r', type=str, default='ir2.png' ,help='input IR image path', required=False)parser.add_argument('-v', type=str, default= 'vr2.png',help='input Visible image path', required=False)args = parser.parse_args()CBF(args.r, args.v)
相关文章:
OpenCV实现基于交叉双边滤波的红外可见光融合算法
1 算法原理 CBF是*Cross Bilateral Filter(交叉双边滤波)*的缩写,论文《IMAGE FUSION BASED ON PIXEL SIGNIFICANCE USING CROSS BILATERAL FILTER》。 论文中,作者使用交叉双边滤波算法对原始图像 A A A, B B B 进行处理得到细节࿰…...
Springboot整合WebService
1.1 概述 webservice 即 web 服务,因互联网而产生,通过 webservice 这种 web 服务,我们可以实现互联网应 用之间的资源共享,比如我们想知道 手机号码归属地,列车时刻表,天气预报,省市区邮…...
504 Gateway Timeout:网关超时解决方法
一、什么是 504Gateway Timeout? 1. 错误定义 504 Gateway Timeout 是 HTTP 状态码的一种,表示网关或代理服务器在等待上游服务器响应时超时。通俗来说,这是服务器之间“对话失败”导致的。 2. 常见触发场景 Nginx 超时:反向代…...
C++ 的 pair 和 tuple
1 std::pair 1.1 C 98 的 std::pair 1.1.1 std::pair 的构造 C 的二元组 std::pair<> 在 C 98 标准中就存在了,其定义如下: template<class T1, class T2> struct pair;std::pair<> 是个类模板,它有两个成员&#x…...
抢十八游戏
前言 我国民国一直流传着一个名叫“抢十八”的抢数游戏:参与游戏的两人从1开始轮流报数,每次至少报1个数,最多报2个数,每人报的每个数不得与自已报过的或对方报过的重复,也不得跳过任何一个数。谁先报到18,…...
从玩具到工业控制--51单片机的跨界传奇【2】
咱们在上一篇博客里面讲解了什么是单片机《单片机入门》,让大家对单片机有了初步的了解。我们今天继续讲解一些有关单片机的知识,顺便也讲解一下我们单片机用到的C语言知识。如果你对C语言还不太了解的话,可以看看博主的C语言专栏哟ÿ…...
LLM实现视频切片合成 前沿知识调研
1.相关产品 产品链接腾讯智影https://zenvideo.qq.com/可灵https://klingai.kuaishou.com/即梦https://jimeng.jianying.com/ai-tool/home/Runwayhttps://aitools.dedao.cn/ai/runwayml-com/Descripthttps://www.descript.com/?utm_sourceai-bot.cn/Opus Cliphttps://www.opu…...
学习threejs,使用FlyControls相机控制器
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.FlyControls 相机控制…...
wordpress 房产网站筛选功能
自定义分类法创建 add_action( init, ashu_post_type ); function ashu_post_type() {register_taxonomy(province,post,array(label => 省,rewrite => array( slug => province ),hierarchical => true));register_taxonomy(city,post,array(label => 市,rewr…...
SQL面试题2:留存率问题
引言 场景介绍: 在互联网产品运营中,用户注册量和留存率是衡量产品吸引力和用户粘性的关键指标,直接影响产品的可持续发展和商业价值。通过分析这些数据,企业可以了解用户行为,优化产品策略,提升用户体验…...
Redis是单线程还是多线程?
大家好,我是锋哥。今天分享关于【Redis是单线程还是多线程?】面试题。希望对大家有帮助; Redis是单线程还是多线程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis是 单线程 的。 尽管Redis的处理是单线程的&a…...
mysql 变量,流程控制与游标
第16章_变量,流程控制与游标 1.变量 分为系统变量和用户自定义变量 1.1系统变量 1.1.1系统变量分类 系统变量分为全局系统变量以及会话系统变量 查看所有全局变量 SHOW GLOBAL VARIABLES 查看所有会话变量 SHOW SESSION VARIABLESor SHOW VARIABLES #默认是会话变量 …...
Java配置log4j日志打印
1. 引入依赖 <dependencies><!-- Log4j 2依赖 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>1.2.14</version> <!-- 可以根据需要修改版本 --></…...
什么是SQL?
什么是SQL? SQL(Structured Query Language,结构化查询语言)是一种用于与关系型数据库进行交互的标准编程语言。SQL 是设计用于管理和操作关系型数据库的语言,主要用于查询、插入、更新、删除和定义数据结构。SQL 是关…...
Linux 机器学习
Linux 机器学习是指在 Linux 操作系统环境下进行机器学习相关的开发、训练和应用。 具体步骤 环境搭建: 选择合适的 Linux 发行版:如 Ubuntu、Fedora、Arch Linux 等。Ubuntu 因其易用性和丰富的软件包管理系统,适合初学者;Fed…...
HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部
HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…...
第27章 汇编语言--- 设备驱动开发基础
汇编语言是低级编程语言的一种,它与特定的计算机架构紧密相关。在设备驱动开发中,汇编语言有时用于编写性能关键的部分或直接操作硬件,因为它是接近机器语言的代码,可以提供对硬件寄存器和指令集的直接访问。 要展开源代码详细叙…...
sosadmin相关命令
sosadmin命令 以下是本人翻译的官方文档,如有不对,还请指出,引用请标明出处。 原本有个对应表可以跳转的,但是CSDN的这个[](#)跳转好像不太一样,必须得用html标签,就懒得改了。 sosadmin help 用法 sosadm…...
【git】-初始git
学习资源推荐- 标签管理 - Git教程 - 廖雪峰的官方网站 一、什么是版本控制? 二、Git的安装 三、掌握Linux常用命令 四、Git基本操作 1、提交代码 2、查看历史提交 3、版本回退 一、什么是版本控制? 版本控制是一种用于记录文件或项目内容变化的系…...
JAVA之单例模式
单例模式(Singleton Pattern)是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。在软件设计中,单例模式常用于控制对资源的访问,例如数据库连接、线程池等。以下是单例模式的详…...
无人机数据集,支持YOLO,COCO json,PASICAL VOC xml格式的标注,正确识别率可达到95.7%,10000张原始图片
无人机数据集,支持YOLO,COCO json,PASICAL VOC xml格式的标注,正确识别率可达到95.7%,10000张原始图片 下载地址: 标注好的数据集下载地址: yolo v11: https://download.csdn.net/download/p…...
Linux:进程概念(三.详解进程:进程状态、优先级、进程切换与调度)
目录 1. Linux中的进程状态 1.1 前台进程和后台进程 运行状态 睡眠状态 磁盘休眠状态 停止状态 kill指令—向进程发送信号 死亡状态 2. 僵尸进程 2.1 僵尸状态 2.2 僵尸进程 2.3 僵尸进程危害 3. 孤儿进程 4. 进程的优先级 概念 查看进程优先级 PRI(…...
stack和queue专题
文章目录 stack最小栈题目解析代码 栈的压入弹出序列题目解析代码 queue二叉树的层序遍历题目解析代码 stack stack和queue都是空间适配器 最小栈 最小栈的题目链接 题目解析 minst是空就进栈,或者是val < minst.top()就进栈 代码 class MinStack { public:M…...
一 rk3568 Android 11固件开发环境搭建 (docker)
一 目标 搭建 rk3568 android 系统内核 及固件开发编译调试环境, 支持开发环境导出分享 基于荣品 rk3568 核心板 系统环境: ubuntu22.04 /ubuntu20.04 64位桌面版 编译环境: docker + ubuntu20.04 , 独立的容器隔离环境,不受系统库版本冲突等影响,无性能损耗, 可…...
2025年华数杯国际赛B题论文首发+代码开源 数据分享+代码运行教学
176项指标数据库 任意组合 千种组合方式 14页纯图 无水印可视化 63页无附录正文 3万字 1、为了方便大家阅读,全文使用中文进行描述,最终版本需自行翻译为英文。 2、文中图形、结论文字描述均为ai写作,可自行将自己的结果发给ai,…...
三小时深度学习PyTorch
【对新手非常友好】三小时深度学习PyTorch快速入门!包教会你的! --人工智能/深度学习/pytorch_哔哩哔哩_bilibili从头开始,把概率论、统计、信息论中零散的知识统一起来_哔哩哔哩_bilibili从编解码和词嵌入开始,一步一步理解Trans…...
朴素贝叶斯分类器
一、生成模型(学习)(Generative Model) vs 判别模型(学习)(Discriminative Model) 结论:贝叶斯分类器是生成模型 1、官方说明 生成模型对联合概率 p(x, y)建模&#x…...
商用车电子电气零部件电磁兼容条件和试验(2)—术语和定义
写在前面 本系列文章主要讲解商用车电子/电气零部件或系统的传导抗干扰、传导发射和辐射抗干扰、电场辐射发射以及静电放电等试验内容及要求,高压试验项目内容及要求。 若有相关问题,欢迎评论沟通,共同进步。(*^▽^*) 目录 商用车电子电气…...
SimpleFOC01|基于STM32F103+CubeMX,移植核心的common代码
导言 如上图所示,进入SimpleFOC官网,点击Github下载源代码。 如上图所示,找到仓库。 comom代码的移植后,simpleFOC的移植算是完成一大半。simpleFOC源码分为如下5个部分,其中communication是跟simpleFOC上位机通讯&a…...
物联网之传感器技术
引言 在数字化浪潮席卷全球的今天,物联网(IoT)已成为推动各行各业变革的重要力量。而物联网传感器,作为物联网感知层的核心技术,更是扮演着不可或缺的角色。它们如同人类的五官,能够感知物理世界中的各种信…...
React:构建用户界面的JavaScript库
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
基于TypeScript封装 `axios` 请求工具详解
TypeScript 项目中,封装一个详细的 axios 请求工具可以提高代码的可维护性、可重用性,并让请求逻辑与业务逻辑分离。以下是一个详细的封装示例,包括请求拦截器、响应拦截器、错误处理、以及类型定义。 1. 安装 Axios 首先,确保你…...
ElasticSearch在Windows环境搭建测试
引子 也持续关注大数据相关内容一段时间,大数据内容很多。想了下还是从目前项目需求侧出发,进行相关学习。Elasticsearch(ES)是位于 Elastic Stack(ELK stack) 核心的分布式搜索和分析引擎。Logstash 和 B…...
通信与网络安全管理之ISO七层模型与TCP/IP模型
一.ISO参考模型 OSI七层模型一般指开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。 它从低到高分别是…...
高级运维:shell练习2
1、需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 vim check.sh #!/bin/bash# 定义网络前缀 network_prefix"192.168.1"# 循环遍历1-254的IP for i in {1..254}; do# 构造完整的IP地址ip"$network_…...
三相无刷电机控制|FOC理论04 - 克拉克变换 + 帕克变换的最终目标
导言 通过坐标系旋转,将电机中复杂的三相交流信号映射到与转子磁场同步的旋转参考系中,将动态问题转化为静态问题。这种方法的优点在于: 简化了控制逻辑。实现了转矩Iq和磁通Id的解耦。提供了直流量控制的可能性,大大提高了控制效…...
SAP FICO资产模块各元素基本关系总结
文章目录 【SAP系统研究】 #SAP #FICO #资产会计 ①:每个折旧表包含多个折旧范围,折旧范围用于设置资产的平行折旧,如不同的折旧范围可以更新不同的总账,更新不同的科目等。 ②:折旧表是要分配给公司代码的ÿ…...
Elasticsearch快速入门
Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分,提供核心的数据存储、搜索、分析功能 elasticsearch之所以有如此高性能的搜索表现,正是得益于底层的倒排索引技术。那么什么是倒排索引呢? Elasticsearch…...
【Java数据结构】二叉树相关算法
第一题:获取二叉树中结点个数 得到二叉树结点个数,如果结点为空则返回0,然后再用递归计算左树结点个数根结点(1个)右树结点个数。 public int nodeSize(Node root){if (root null)return 0;return nodeSize1(root.l…...
30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <1> 5分钟快速创建一个springboot web项目
快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui,并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…...
vue3学习日记6 - Layout
最近发现职场前端用的框架大多为vue,所以最近也跟着黑马程序员vue3的课程进行学习,以下是我的学习记录 视频网址: Day2-17.Layout-Pinia优化重复请求_哔哩哔哩_bilibili 学习日记: vue3学习日记1 - 环境搭建-CSDN博客 vue3学…...
1/14 C++
练习:将图形类的获取周长和获取面积函数设置成虚函数,完成多态 再定义一个全局函数,能够在该函数中实现:无论传递任何图形,都可以输出传递的图形的周长和面积 #include <iostream>using namespace std; class Sh…...
【Uniapp-Vue3】页面生命周期onLoad和onReady
一、onLoad函数 onLoad在页面载入时触发,多用于页面跳转时进行参数传递。 我们在跳转的时候传递参数name和age: 接受参数: import {onLoad} from "dcloudio/uni-app"; onLoad((e)>{...}) 二、onReady函数 页面生命周期函数中的onReady其…...
使用 configparser 读取 INI 配置文件
使用 configparser 读取 INI 配置文件 适合于读取 .ini 格式的配置文件。 配置文件示例 (config.ini): [DEFAULT] host localhost port 3306 [database] user admin password secret import configparser# 创建配置解析器 config configparser.ConfigParser()# 读取配…...
类模板的使用方法
目录 类模板的使用方法 1.类模板语法 2.类模板和函数模板区别 3.类模板中成员函数创建时机 4.类函数对象做函数参数 5.类模板和继承 6.类模板成员函数类外实现 7.类模板分文件编写 person.hpp 实现cpp文件: 8.类模板与友元 9.类模板案例 MyArray.hpp …...
docker mysql5.7如何设置不区分大小写
环境 docker部署,镜像是5.7,操作系统是centos 操作方式 mysql 配置文件是放在 /etc/mysql/mysql.conf.d/mysqld.cnf, vim /etc/mysql/mysql.conf.d/mysqld.cnf lower_case_table_names1 重启mysql容器 验证 SHOW VARIABLES LIKE low…...
Docker与虚拟机的区别及常用指令详解
在现代软件开发中,容器化和虚拟化技术已经成为不可或缺的工具。Docker和虚拟机(VM)是两种常见的技术, 它们都可以帮助开发者在不同的环境中运行应用程序。然而,它们的工作原理和使用场景有很大的不同。本文将详细探讨D…...
C#异步和多线程,Thread,Task和async/await关键字--12
目录 一.多线程和异步的区别 1.多线程 2.异步编程 多线程和异步的区别 二.Thread,Task和async/await关键字的区别 1.Thread 2.Task 3.async/await 三.Thread,Task和async/await关键字的详细对比 1.Thread和Task的详细对比 2.Task 与 async/await 的配合使用 3. asy…...
第一次作业三种方式安装mysql(Windows和linux下)作业
在Windows11上安装sever(服务)端和客户端 server端安装 打开官网MySQL 进入到主页 点击DOWMLOAD 进入下载界面 点击下方MySQL Community (GPL) Downloads 进入社区版mysql下载界面 点击 MySQL Community Server 进入server端下载 选择8.4.3LTS&…...
ubuntu官方软件包网站 字体设置
在https://ubuntu.pkgs.org/22.04/ubuntu-universe-amd64/xl2tpd_1.3.16-1_amd64.deb.html搜索找到需要的软件后,点击,下滑, 即可在Links和Download找到相关链接,下载即可, 但是找不到ros的安装包, 字体设…...