【图像轮廓特征查找】图像处理(OpenCV) -part8
17 图像轮廓特征查找
图像轮廓特征查找其实就是他的外接轮廓。
应用:
图像分割
形状分析
物体检测与识别
根据轮廓点进行,所以要先找到轮廓。
先灰度化、二值化。目标物体白色,非目标物体黑色,选择合适的儿值化方式。
有了轮廓点就可以找到最上、最下、最左、最右的四个坐标,X_{min}、X_{max}、Y_{min}、Y_{max}。就可以绘制出矩形。
17.1 外接矩形
boundingRect(轮廓点)
形状的外接矩形有两种,如下图,绿色的叫外接矩形,表示不考虑旋转并且能包含整个轮廓的矩形。其中,外接矩形可根据获得到的轮廓坐标中最上、最下、最左、最右的点的坐标来绘制外接矩形,也就是下图中的绿色矩形。蓝色的是最小外接矩形,会考虑面积。
cv.boundingRect
函数用于计算一组点(通常是轮廓)的最小外接矩形。这个矩形是一个 轴对齐的矩形,也就是说,它的边与图像坐标轴平行。
作用
快速获取一个能够包含目标轮廓的矩形边界。
简单直观地定位目标轮廓的大致区域。
返回参数
x
:外接矩形左上角的 x 坐标。
y
:外接矩形左上角的 y 坐标。
w
:外接矩形的宽度。
h
:外接矩形的高度。
import cv2 as cv
import numpy as np
img = cv.imread('images/ikun4.jpg')
#灰度图
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#二值化处理,阈值法 因为目标是白色我们需要白色
ret, binary = cv.threshold(gray, 200, 255, cv.THRESH_BINARY_INV)
#查找轮廓
contours, hierarchy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):#查找凸包hull = cv.convexHull(contours[i])#绘制凸包cv.polylines(img, [hull], True, (100, 100, 255), 3)
#画出外接矩形
for i in range(len(contours)):x, y, w, h = cv.boundingRect(contours[i])cv.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2)
cv.imshow('1', img)
# cv.imshow('2', binary)
cv.waitKey(0)
cv.destroyAllWindows()
获取方式
在代码中,通过循环遍历查找到的轮廓
contours
,对每个轮廓调用cv.boundingRect
函数来获取其外接矩形的位置和大小参数,包括左上角顶点坐标(x,y)、宽度 w 和高度 h。绘制目的
使用
cv.rectangle
函数在原图上绘制出这些外接矩形,通过矩形的边界将目标轮廓大致框选出来,便于更直观地观察和分析目标在图像中的分布情况,以及与其他图像元素的相对位置关系。
17.2 最小外接矩形
定义与原理
最小外接矩形 是能够完全包含目标轮廓的最小面积的矩形,它允许矩形相对于图像坐标轴旋转,因此可以更好地贴合轮廓的形状,相比普通外接矩形(轴对齐的外接矩形),它可以更精确地描述轮廓的形状和方向。
其基本原理是通过计算轮廓点集的最小面积矩形,这个矩形的边不一定与图像坐标轴对齐。它需要找到一组四个点,使得这四个点构成的矩形能够包含所有轮廓点,并且面积是所有可能的包含该轮廓的矩形中最小的。
计算方法
从轮廓点集出发,利用几何算法来确定最小外接矩形的边界。
一种常见的方法是基于旋转卡壳(Rotating Calipers)算法,它通过旋转两条平行的切线来寻找能够包含整个点集的最小矩形。具体步骤为:首先找到点集的凸包;然后在凸包上选择两个点作为初始两个的顶点,这两点确定一条边;接着,寻找与该边相对的另一条边,使得这两条边之间的距离最大,从而形成一个初始的矩形;最后,逐步旋转这两条边,找到使矩形面积最小的那一对边,从而确定最小外接矩形。
在 OpenCV 中,可以通过 cv.minAreaRect
函数获取轮廓的最小外接矩形,该函数返回一个包含中心坐标、长宽以及旋转角度的元组,利用这些参数可以绘制出最小外接矩形。
需要使用到的API说明:
contours, hierarchy = cv2.findContours(image_np_thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours为二值图像上查找所有的外部轮廓
rect = cv2.minAreaRect(cnt)
传入的cnt参数为contours中的轮廓,可以遍历contours中的所有轮廓,然后计算出每个轮廓的小面积外接矩形
rect 是计算轮廓最小面积外接矩形:rect 结构通常包含中心点坐标 (x, y)
、宽度 width
、高度 height
和旋转角度 angle
cv2.boxPoints(rect).astype(int)
cv2.boxPoints(rect)返回 是一个形状为 4行2列的数组,每一行代表一个点的坐标(x, y),顺序按照逆时针或顺时针方向排列
将最小外接矩形转换为边界框的四个角点,并转换为整数坐标
cv2.drawContours(image, contours, contourIdx, color, thickness)
image:原图像,一般为 numpy 数组,通常为灰度或彩色图像。
contours:一个包含多个轮廓的列表,可以用上一个api得到的 [box]
contourIdx:要绘制的轮廓索引。如果设置为 -1
,则绘制所有轮廓。
color:轮廓的颜色,可以是 BGR 颜色格式的三元组,例如 (0, 0, 255)
表示红色。
thickness:轮廓线的粗细,如果是正数,则绘制实线;如果是 0,则绘制轮廓点;如果是负数,则填充轮廓内部区域。
#最小外接矩形 旋转卡壳法
#读取图像
img = cv.imread('images/feiwu.png')
gary = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#二值化
ret, binary = cv.threshold(gary, 200, 255, cv.THRESH_BINARY_INV)
#查找轮廓
contours, hierarchy = cv.findContours(binary, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):#最小外接矩形 rect = (center(x,y), (width, height), angle)rect = cv.minAreaRect(contours[i])box = cv.boxPoints(rect).astype(np.int32)cv.drawContours(img, [box], -1, (0, 0, 255), 2,cv.LINE_AA)
#画出外接矩形
for i in range(len(contours)):x, y, w, h = cv.boundingRect(contours[i])cv.rectangle(img, (x, y), (x + w, y + h), (0, 0, 0), 2)
cv.imshow("1", img)
cv.waitKey(0)
cv.destroyAllWindows()
绘制外接矩形和最小外接矩形是有区别的
17.3 最小外接圆
寻找最小外接圆使用的算法是Welzl算法。Welzl算法基于一个定理:希尔伯特圆定理表明,对于平面上的任意三个不在同一直线上的点,存在一个唯一的圆同时通过这三个点,且该圆是最小面积的圆(即包含这三个点的圆中半径最小的圆,也称为最小覆盖圆)。
进一步推广到任意 n 个不在同一圆上的点,总存在一个唯一的最小覆盖圆包含这 n 个点。
若已经存在平面上互不共线(或共圆)的 n 个点,并确定了它们的最小覆盖圆,那么添加第 n+1 个点,并且要求这个点不在原来的最小覆盖圆内(即在圆外),为了使新的包含 n+1 个点的最小覆盖圆的半径增大,新加入的点必须位于由原 n 个点确定的最小覆盖圆的边界上(即圆周上)。这是因为,如果新点在原最小覆盖圆的内部,显然不会影响最小覆盖圆;如果新点在原最小覆盖圆之外但不在圆周上,那么通过新点和至少两个原有圆上的点可以构造出一个更大的圆,这个圆必然比原最小覆盖圆更大,因此不是包含所有 n+1 个点的最小覆盖圆。所以,按照这一逻辑,当第 n+1 个点在原 n 个点的最小覆盖圆外时,确实这个点会位于包含所有 n+1 个点的新最小覆盖圆的圆周上。
有了这个定理,就可以先取3个点建立一个圆(不共线的三个点即可确定一个圆,如果共线就取距离最远的两个点作为直径建立圆),然后遍历剩下的所有点,对于遍历到的点P来说:
如果该点在圆内,那么最小覆盖圆不变。
如果该点在圆外,根据上述定理,该点一定在想要求得的最小覆盖圆的圆周上,又因为三个点才能确定一个圆,所以需要枚举P点之前的点来找其余的两个点。当找到与P点组成的圆能够将所有点都包含在圆内或圆上,该圆就是这些点的最小外接圆。
在OpenCV中,可以直接使用cv2.minEnclosingCircle()来获取最小外接圆,该函数只需要输入一个参数,就是要绘制最小外接圆的点集的坐标,然后会返回最小外接圆的圆心坐标与半径。通过该函数返回的内容信息即可绘制某点集的最小外接圆。如下图所示:
需要使用的API说明
cv2.minEnclosingCircle(points) -> (center, radius)
参数说明:
points
:输入参数图片轮廓数据
返回值:
center
:一个包含圆心坐标的二元组 (x, y)
。
radius
:浮点数类型,表示计算得到的最小覆盖圆的半径。
cv2.circle(img, center, radius, color, thickness)
img
:输入图像,通常是一个numpy数组,代表要绘制圆形的图像。
center
:一个二元组 (x, y)
,表示圆心的坐标位置。
radius
:整型或浮点型数值,表示圆的半径长度。
color
:颜色标识,可以是BGR格式的三元组 (B, G, R)
,例如 (255, 0, 0)
表示红色。
thickness
:整数,表示圆边框的宽度。如果设置为 -1
,则会填充整个圆。
img = cv.imread('images/haimbb.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 100, 255, cv.THRESH_BINARY_INV)
#查找轮廓
contours, hierarchy = cv.findContours(binary, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):#绘制外接圆(x, y), radius = cv.minEnclosingCircle(contours[i])center = (int(x), int(y))radius = int(radius)cv.circle(img, center, radius, (128, 128, 128), 2)#绘制外接矩形rect = cv.minAreaRect(contours[i])box = cv.boxPoints(rect)
cv.imshow("1", img)
cv.imshow("2", binary)
cv.waitKey(0)
cv.destroyAllWindows()
18 直方图均衡化
相关文章:
【图像轮廓特征查找】图像处理(OpenCV) -part8
17 图像轮廓特征查找 图像轮廓特征查找其实就是他的外接轮廓。 应用: 图像分割 形状分析 物体检测与识别 根据轮廓点进行,所以要先找到轮廓。 先灰度化、二值化。目标物体白色,非目标物体黑色,选择合适的儿值化方式。 有了轮…...
丝杆升降机蜗轮蜗杆加工工艺深度解析:从选材到制造的全流程技术要点
在机械传动领域,丝杆升降机凭借其高精度、大负载等优势,广泛应用于自动化设备、精密仪器等众多场景。而蜗轮蜗杆作为丝杆升降机的核心传动部件,其加工工艺的优劣直接决定了设备的传动效率、使用寿命及稳定性。本文将深入剖析丝杆升降机蜗轮蜗…...
git远程分支重命名(纯代码操作)
目录 步骤 1:重命名本地分支 步骤 2:推送新分支到远程 简单讲讲: 2.1.-u 和 --set-upstream 的区别 2.2. 为什么需要设置上游(upstream)? 示例对比: 2.3. 如何验证是否设置成功ÿ…...
《AI大模型应知应会100篇》第31篇:大模型重塑教育:从智能助教到学习革命的实践探索
第31篇:大模型重塑教育:从智能助教到学习革命的实践探索 摘要 当北京大学的AI助教在凌晨三点解答学生微积分难题,当Khan Academy的AI导师为每个学生定制专属学习路径,我们正见证教育史上最具颠覆性的技术变革。本文通过真实教育…...
安装Github软件详细流程,win10系统从配置git到安装软件详解,以及github软件整合包制作方法(
win10系统部署安装开源ai必备 一、安装git应用程序(用来下来github软件) 官网下载git的exe可执行文件,Git - Downloads 或者这里下夸克网盘分享 运行git应用程序,一路’Next’到底即可。 配置安装路径 此时如果直接运行git命…...
重构・协同・共生:传统代理渠道数字化融合全链路解决方案
当 90 后经销商开始用直播卖家电,当药品流向数据在区块链上实时流转,传统代理渠道正在经历一场「数字觉醒」。面对流量碎片化、运营低效化的行业痛点,如何让扎根线下数十年的渠道网络,在数字化平台上焕发新生?蚓链提炼…...
智驱未来:AI大模型重构数据治理新范式
第一章 数据治理的进化之路 1.1 传统数据治理的困境 在制造业巨头西门子的案例中,其全球200个工厂每天产生1.2PB工业数据,传统人工清洗需要300名工程师耗时72小时完成,错误率高达15%。数据孤岛问题导致供应链决策延迟平均达48小时。 1.2 A…...
信息收集之hack用的网络空间搜索引擎
目录 1. Shodan 2. Censys 3. ZoomEye 4. BinaryEdge 5. Onyphe 6. LeakIX 7. GreyNoise 8. PulseDive 9. Spyse 10. Intrigue 11. FOFA (Finger Of Find Anything) 12. 🔍 钟馗之眼 (ZoomEye) 总结 对于黑客、网络安全专家和白帽子工程师来说…...
青少年编程与数学 02-018 C++数据结构与算法 01课题、算法
青少年编程与数学 02-018 C数据结构与算法 01课题、算法 一、算法的定义二、算法的设计方法1. 分治法2. 动态规划法3. 贪心算法4. 回溯法5. 迭代法6. 递归法7. 枚举法8. 分支定界法 三、算法的描述方法1. **自然语言描述**2. **流程图描述**3. **伪代码描述**4. **程序设计语言…...
LangChain、LlamaIndex 和 ChatGPT 的详细对比分析及总结表格
以下是 LangChain、LlamaIndex 和 ChatGPT 的详细对比分析及总结表格: 1. 核心功能对比 工具核心功能LangChain框架,用于构建端到端的 LLM 应用程序,支持 prompt 工程、模型调用、数据集成、工具链开发。LlamaIndex文档处理工具,…...
基于单片机的BMS热管理功能设计
标题:基于单片机的BMS热管理功能设计 内容:1.摘要 摘要:在电动汽车和储能系统中,电池管理系统(BMS)的热管理功能至关重要,它直接影响电池的性能、寿命和安全性。本文的目的是设计一种基于单片机的BMS热管理功能。采用…...
数字虹膜:无网时代的视觉密语 | 讨论
引言:当网络成为枷锁 在断网即失联的当下,我们是否过度依赖脆弱的网络线缆?当两台孤立设备急需交换数据,传统方案或受限于物理介质,或暴露于无线信号被劫持的风险。有没有可能绕过所有中间节点,让数据像光线…...
Kubernetes相关的名词解释Container(16)
什么是Container? 在 Kubernetes 中,Container(容器) 是一个核心概念,你可以将镜像(Image)类比为程序的“源代码”,而容器是这段“代码”运行时的进程。例如,一个 nginx…...
腾讯云×数语科技:Datablau DDM (AI智能版)上架云应用!
在数据爆炸式增长的时代,传统的数据建模方式已难以满足企业对敏捷性、智能化、自动化的需求。数语科技联合腾讯云推出的 Datablau DDM 数据建模平台(AI智能版),基于AI语义建模技术,深度融合腾讯混元大模型能力…...
可穿戴设备待机功耗需降至μA级但需保持实时响应(2万字长文深度解析)
可穿戴设备的功耗与响应需求之矛盾 在过去十年中,可穿戴设备以惊人的速度融入我们的日常生活,成为现代科技与个人健康管理的重要交汇点。从智能手表到健身手环,从医疗监测设备到增强现实眼镜,这些设备不仅仅是科技产品的延伸&…...
【身份证扫描件识别表格】如何识别大量身份证扫描件将内容导出保存到Excel表格,一次性处理多张身份证图片导出Excel表格,基于WPF和腾讯云的实现方案
基于WPF和腾讯云的身份证扫描件批量处理方案 适用场景 本方案适用于需要批量处理大量身份证扫描件的场景,例如: 企业人事部门批量录入新员工身份信息银行或金融机构办理批量开户业务教育机构收集学生身份信息政府部门进行人口信息统计酒店、医院等需要实名登记的场所这些场景…...
数字化补贴:企业转型的 “政策东风” 如何借力?
在数字经济浪潮席卷全球的当下,数字化转型已从企业的 “选修课” 变为 “生存必修课”。面对技术迭代加速与市场竞争加剧的双重压力,如何低成本、高效率完成转型?各级政府推出的数字化补贴政策,正成为企业借势突围的关键抓手。 政…...
动态LOD策略细节层级控制:根据视角距离动态简化远距量子态渲染
动态LOD策略在量子计算可视化中的优化实现 1. 细节层级控制:动态简化远距量子态渲染 在量子计算的可视化中,量子态通常表现为高维数据(如布洛赫球面或多量子比特纠缠态)。动态LOD(Level of Detail)策略通过以下方式优化渲染性能: 距离驱动的几何简化: 远距离渲染:当…...
IP精准检测“ipinfo”
目录 核心功能与特点 使用方法 应用场景 数据隐私与限制 扩展工具与服务 核心功能与特点 IP地址查询 支持输入任意IP地址查询详细信息,包括基础IP、主机名、网络归属等,且无需注册即可使用基础功能。 地理位置识别 提供国家、城市、邮政编码、经纬…...
【Linux】调试工具gdb的认识和使用指令介绍(图文详解)
目录 1、debug和release的知识 2、gdb的使用和常用指令介绍: (1)、windows下调试的功能: (2)、进入和退出: (3)、调试过程中的相关指令: 3、调试究竟是在…...
C++ STL:从零开始模拟实现 list 容器
文章目录 引言1. 疑难点解析1.1 迭代器类为什么设置三个模版参数? 2. 完整源码3. 完整测试代码 引言 C 标准模板库(STL)中的 list 是一个双向链表容器,它提供了高效的插入和删除操作。本文将带领你一步步实现一个简化版的 list 容器,帮助你深…...
Spark_SQL
Spark-SQL连接Hive 内嵌的 HIVE 外部的 HIVE 运行 Spark beeline(了解) Spark Thrift Server 是 Spark 社区基于 HiveServer2 实现的一个 Thrift 服务。旨在无缝兼容HiveServer2。 运行Spark-SQL CLI Spark SQL CLI 可以很方便的在本地运行 Hive 元数…...
20242817李臻《Linux⾼级编程实践》第8周
20242817李臻《Linux⾼级编程实践》第8周 一、AI对学习内容的总结 计算机网络概述 1. 计算机网络概述 计算机网络的定义:通过通信线路将地理位置不同的多台计算机连接起来,实现资源共享和信息传递。网络的组成: 硬件:计算机、…...
《Java工程师面试核心突破》专栏简介
《Java工程师面试核心突破》专栏简介 🔥 大厂Offer收割机 | 源码级技术纵深 | 90%高频考点覆盖 专栏定位 「拒绝八股文,直击技术本质」 本专栏专为Java中高级工程师量身定制,通过6大核心模块、30个硬核专题,系统性拆解大厂面试…...
Spark-SQL与Hive
Spark-SQL与Hive的那些事儿:从连接到数据处理 在大数据处理领域,Spark-SQL和Hive都是非常重要的工具。今天咱们就来聊聊它们之间的关系,以及怎么用Spark-SQL去连接Hive进行数据处理。先说说Hive,它是Hadoop上的SQL引擎࿰…...
Keil5没有stm32的芯片库
下载完重启就行了,我这里就不演示了,stm已经下载,随便选的一个芯片库演示一下...
Kafka 在小流量和大流量场景下的顺序消费问题
一、低流量系统 特点 消息量较少,吞吐量要求低。系统资源(如 CPU、内存、网络)相对充足。对延迟容忍度较高。 保证顺序消费的方案 单分区 单消费者 将消息发送到单个分区(例如固定 Partition 0),由单个…...
Spark-SQL(四)
本节课学习了spark连接hive数据,在 spark-shell 中,可以看到连接成功 将依赖放进pom.xml中 运行代码 创建文件夹 spark-warehouse 为了使在 node01:50070 中查看到数据库,需要添加如下代码,就可以看到新创建的数据库 spark-sql_1…...
海外服务器安装Ubuntu 22.04图形界面并配置VNC远程访问指南
在云计算和远程工作日益普及的今天,如何高效地管理和使用海外服务器成为了一个热门话题。本文将详细介绍如何在海外的Ubuntu 22.04服务器上安装图形界面,并配置VNC服务来实现远程访问。无论您是开发者、系统管理员,还是只是想要更便捷地管理您的海外服务器,这篇指南都能为您…...
kafka 分区分散在不同服务器上的原理
目录 原理方面在 1- 5,如果对原理理解,可以直接到图例部分,看结果 1. 分区分配机制 2. 副本分配机制 3. 手动控制分区的分布 4.分区(Partition)如何分布在不同的 Broker 上? 5. 主分区(Le…...
JavaScript 中的单例模式
单例模式在 JavaScript 中是一种确保类只有一个实例,并提供全局访问点的方式。由于 JavaScript 的语言特性(如对象字面量、模块系统等),实现单例有多种方式。 常见实现方式 1. 对象字面量(最简单的单例) …...
19_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3
基于LLamaFactory微调_LLama3的LoRA微调 1. 基本概念1.1. LoRA微调的基本原理1.2. LoRA与QLoRA1.3. 什么是 GGUF 2.LLaMA-Factory介绍3. 实操3.1 实验环境3.2 基座模型3.3 安装 LLaMA-Factory 框架3.3.1 前置条件 3.4 数据准备3.5 微调和训练模型torch.cuda.OutOfMemoryError: …...
【Maven基础】
Maven:一个项目管理工具 前言 传统项目管理存在的问题: 依赖管理混乱 需要自己去网上搜 jar 包,找对版本很痛苦(还容易找错)某个库依赖另一个库(传递依赖),你得自己挨个找齐不小心…...
衡石 ChatBI 用户手册-使用指南
产品概述 衡石 ChatBI 是一款融合了 AI 技术的智能数据分析工具,旨在为企业业务人员提供直观、高效的数据交互体验。通过自然语言处理技术,用户可以直接与数据进行对话,快速获取所需信息,从而为业务决策提供有力支持。此外&…...
DeepSeek+Cursor+Devbox+Sealos项目实战
黑马程序员DeepSeekCursorDevboxSealos带你零代码搞定实战项目开发部署视频教程,基于AI完成项目的设计、开发、测试、联调、部署全流程 原视频地址视频选的项目非常基础,基本就是过了个web开发流程,但我在实际跟着操作时,ai依然会…...
Unreal 如何实现一个Vehicle汽车沿着一条指定Spline路径自动驾驶
文章目录 前言准备工作驾驶原理驾驶轨迹自动驾驶油门控制科普:什么是PID?转向控制科普:点乘和叉乘最终蓝图最后前言 Unreal Engine 的 Chaos Vehicle System(原PhysX Vehicle)是一套基于物理模拟的车辆驾驶系统,支持高度可定制的车辆行为,适用于赛车、模拟驾驶等游戏类…...
开源脚本分享:用matlab处理ltspice生成的.raw双脉冲数据
Author :PNJIE DATE: 2025/04/21 V0.0 前言 该项目旨在使用Matlab处理LTspice的.raw文件,包括动态计算和绘图,部分脚本基于LTspice2Matlab项目: PeterFeicht/ltspice2matlab: LTspice2Matlab - 将LTspice数据导入MATLAB github地址&#x…...
聊透多线程编程-线程互斥与同步-13. C# Mutex类实现线程互斥
目录 一、什么是临界区? 二、Mutex类简介 三、Mutex的基本用法 解释: 四、Mutex的工作原理 五、使用示例1-保护共享资源 解释: 六、使用示例2-跨进程同步 示例场景 1. 进程A - 主进程 2. 进程B - 第二个进程 输出结果 ProcessA …...
Halcon应用:相机标定之应用
提示:若没有查找的算子,可以评论区留言,会尽快更新 Halcon应用:相机标定之应用 前言一、Halcon应用?二、应用实战1、如何应用标定(快速)2、代码讲解(重要)2.1 、我们还是…...
【计算机视觉】CV实战项目- CMU目标检测与跟踪系统 Object Detection Tracking for Surveillance Video
CMU 目标检测与跟踪系统(Object Detection & Tracking for Surveillance Video) 1. 项目概述2. 技术亮点(1)目标检测模型(2)多目标跟踪(MOT)(3)重识别&am…...
报错 | 配置 postcss 出现 报错:A `require()` style import is forbidden.
背景:安装 postcss,配置时,出现报错:A require() style import is forbidden. 翻译:禁止导入require()样式 解决:前头添加 /* eslint-env node */ ,也飘红,…...
[Qt]双击事件导致的问题
有如下代码 #include "mymodel.h" #include <QDebug>myModel::myModel(QObject *parent) : QAbstractTableModel(parent) {status << Qt::Unchecked << Qt::Unchecked << Qt::Unchecked; }int myModel::rowCount(const QModelIndex &pa…...
[SpringBoot]配置文件
通过案例可以不难发现,springboot实际上就是spring的一种辅助工具,帮我们更快地使用spring开发。尤其是配置这块,注解springboot解决了很多繁琐重复的配置操作。 但在实际开发需求,当然不可能只用springboot已经配置好的配置信息。…...
前端框架开发编译阶段与运行时的核心内容详解Tree Shaking核心实现原理详解
前端框架开发编译阶段与运行时的核心内容详解 一、开发编译阶段 开发编译阶段是前端框架将源代码转换为浏览器可执行代码的核心过程,涉及代码转换、优化和资源整合。 模块打包与依赖管理 • 依赖图构建:工具(如Webpack、Vile)通过静态分析生成模块依赖关系图,支持按需加载…...
idea2024.1双击快捷方式打不开
idea2024.1突然双击快捷方式打不开,使用管理员运行也打不开 在安装的idea路径下的bin目录下双击打开idea.bat文件,要是打不开使用txt格式打开,打开后在最后一行加上pause,之后保存。 看看报错信息是不是有一个initializedExcept…...
鸿蒙NEXT开发LRUCache缓存工具类(单例模式)(ArkTs)
import { util } from kit.ArkTS;/*** LRUCache缓存工具类(单例模式)* author 鸿蒙布道师* since 2025/04/21*/ export class LRUCacheUtil {private static instance: LRUCacheUtil;private lruCache: util.LRUCache<string, any>;/*** 私有构造函…...
开源身份和访问管理(IAM)解决方案:Keycloak
一、Keycloak介绍 1、什么是 Keycloak? Keycloak 是一个开源的身份和访问管理(Identity and Access Management - IAM)解决方案。它旨在为现代应用程序和服务提供安全保障,简化身份验证和授权过程。Keycloak 提供了集中式的用户…...
Latex科研入门教程
Introduction 这篇文章适合有markdown基础的人看,不会的人可以先去学一下markdown. 仅适用于科研入门. 本文使用的latex环境为overleaf Latex概况 文件格式 以.tex为结尾的文件可能有多个.tex文件最终只编译一个文件,相当于一个文件控制其他子文件. Latex 代码分为三种&…...
CSS 中实现 div 居中有以下几种常用方法
在 CSS 中实现 div 居中有以下几种常用方法,具体取决于需要 水平居中、垂直居中 还是 两者兼具。以下是详细解决方案: 目录 一、水平居中(Horizontal Centering) 1. 行内块元素(Inline-Blo…...
win11修改文件后缀名
一、问题描述 win11系统中,直接添加.py后缀后仍然是txt文本文件 二、处理方式: 点击上方三个小点点击“选项”按钮 点击“查看”取消“隐藏已知文件类型的扩展名”选项点击“应用” 此时,“.txt”文件后缀显示出来了。将txt删去,…...