OpenCV 图像轮廓查找与绘制全攻略:从函数使用到实战应用详解
摘要:本文详细介绍了 OpenCV 中用于查找图像轮廓的 cv2.findContours() 函数以及绘制轮廓的 cv2.drawContours() 函数的使用方法。涵盖 cv2.findContours() 各参数(如 mode 不同取值对应不同轮廓检索模式)及返回值的详细解析,搭配多幅示例图片与丰富代码示例展示不同模式下的效果差异,同时展示了 cv2.drawContours() 的用法,并通过案例讲解如何利用轮廓绘制功能获取前景对象,助力读者全面掌握图像轮廓相关操作要点及应用场景。
如果您觉得我的文章对您有帮助,可以点赞收藏关注,持续学习更多与OpenCV相关的知识
OpenCV 图像轮廓查找与绘制全攻略:从函数使用到实战应用详解
- 查找并绘制轮廓
- cv2.findContours()函数的使用
- 返回值countours的属性
- 参数mode与返回值hierarchy
- cv2.drawContours()函数的使用
- 利用轮廓绘制功能,获取前景对象
- 致谢
查找并绘制轮廓
边缘检测能检测出边缘,但是边缘不连续,但不是一个整体。OpenCV提供了cv2.findContours()去查找图像轮廓,cv2.drawContours()将轮廓绘制起来。
cv2.findContours()函数的使用
该函数的语法如下:
image与被处理图像一致,contours返回的轮廓 ,hierarchy 图像的拓普信息(轮廓层次) = cv2.findContours(image原始图像,mode轮廓检索模式,method轮廓的近似方法)
这里有一个补充:当OpenCV版本的大于4.x,返回值没有image
我通过画图板画了一个例子,存储在和代码同一个文件夹下,大家可以复制我的图片,去作为练习,(补充一个重要的前提:OpenCV中,都是从黑色背景中找白色对象,对象是白的,背景是黑的,图片必须是灰度二值图像,对于彩色图像要做好阈值处理):
我将这张图片命名为countours.JPG,这是我的文件夹(我用的是 jupyter notebook 大家用pycharm的就把代码和图片放在同一个文件夹下就可以运行我的代码了):
返回值countours的属性
他的类型是list:
import numpy as np
import cv2
img = cv2.imread("countours.JPG",cv2.IMREAD_GRAYSCALE)
countours , hierarchy = cv2.findContours(img,mode = cv2.RETR_EXTERNAL,method = cv2.CHAIN_APPROX_NONE)
print(type(countours))
每一条轮廓的shape与内容都用列表的方法访问:
一定要注意 必须先用高斯滤波进行平滑处理去除噪声 再用二值化阈值处理,才能计算出正确的轮廓
import numpy as np
import cv2
img = cv2.imread("countours.JPG",cv2.IMREAD_GRAYSCALE)# 先用高斯滤波平滑处理
img = cv2.GaussianBlur(img, (5, 5), 0)
# 再用阈值处理转化为二值图像
_,img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
countours , hierarchy = cv2.findContours(img,mode = cv2.RETR_EXTERNAL,method = cv2.CHAIN_APPROX_NONE)
print(len(countours))
for i in range(len(countours)):print(countours[i].shape)print(countours[i])
通过代码找出来十条轮廓,与我们手动标注的数量一致:
参数mode与返回值hierarchy
我将这张图片命名为mode.JPG,这是我的文件夹(我用的是 jupyter notebook 大家用pycharm的就把代码和图片放在同一个文件夹下就可以运行我的代码了):
不同的mode参数对应着不同的hierarchy,分为四种:
第一种:cv2.RETR_EXTERNAL(只检测外轮廓)
import numpy as np
import cv2
img = cv2.imread("mode.JPG",cv2.IMREAD_GRAYSCALE)# 先用高斯滤波平滑处理
img = cv2.GaussianBlur(img, (5, 5), 0)
# 再用阈值处理转化为二值图像
_,img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
countours , hierarchy = cv2.findContours(img,mode = cv2.RETR_EXTERNAL,method = cv2.CHAIN_APPROX_NONE)
print(len(countours))
print(hierarchy)
输出值[1 -1 -1 -1]代表 第0个轮廓的后一个轮廓是第一个轮廓,他没有前一个轮廓 所以第二个元素是-1 他没有子轮廓 和父轮廓 所以第三第四个元素都是 - 1
输出值[-1 0 -1 -1]代表第1个轮廓 没有后面轮廓了 所以是-1 他的前一个轮廓 是0,他没有子轮廓和父轮廓 所以第三个第四个元素都是 -1
找到了两条轮廓,原因是cv2.RETR_EXTERNAL会导致只搜索外轮廓:
第二种:cv2.RETR_LIST
检测到的轮廓不考虑父子关系
在上面的代码中修改mode = cv2.RETR_LIST,运行结果如下:
这个结果前两行的第一个元素都是 1 2 说明他们有后一个轮廓 ,因为没有考虑父子关系,所以每一行的三四元素都是-1 第1 第2 轮廓都有前一个轮廓 分别是 0 和1 ,所以第二列 是 -1 0 1
第三种:cv2.RETR_CCOMP
检查所有轮廓并组织称一个两级层次结构,修改参数mode = cv2.RETR_CCOMP,继续运行得到如下结果:
可以看到第1 轮廓 和 第2 轮廓存在了 父子 关系 :
对于1,2轮廓来说他们是父子关系,所以不存在后一个轮廓所以是-1:
第四种:cv2.RETR_TREE
生成一个等级树,为了验证第四个和第三个的区别,我重新用画图板画了一张图起名为tree.JPG,大家可以复制到自己的文件夹下:
import numpy as np
import cv2
img = cv2.imread("tree.JPG",cv2.IMREAD_GRAYSCALE)
# 先用高斯滤波平滑处理
img = cv2.GaussianBlur(img, (5, 5), 0)
# 再用阈值处理转化为二值图像
_,img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
countours_comp , hierarchy_comp = cv2.findContours(img,mode = cv2.RETR_CCOMP,method = cv2.CHAIN_APPROX_NONE)
countours_tree , hierarchy_tree = cv2.findContours(img,mode = cv2.RETR_TREE,method = cv2.CHAIN_APPROX_NONE)
print(hierarchy_comp)
print(hierarchy_tree)
详细分析一下,运行结果:
显而易见的是 cv2.RETR_CCOMP时,最多产生一个两级的父子结构:
但是cv2.RETR_TREE产生了一个多级的父子结构树:
cv2.drawContours()函数的使用
语法:
cou_image待绘制的轮廓图像 = cv2.drawCountours(image待处理图像,countours需要绘制的轮廓 list类型,countourIdx绘制的边缘索引,color绘制的颜色,thickness绘制轮廓的粗细,lineType画笔类型,hierarchy拓普信息,maxLevel层次的深度,offset偏移参数,使得轮廓偏移多少位置)
使用tree.JPG做案例来用代码验证一下效果:
import numpy as np
import cv2
img = cv2.imread("tree.JPG",cv2.IMREAD_GRAYSCALE)
# 先用高斯滤波平滑处理
img = cv2.GaussianBlur(img, (5, 5), 0)
# 再用阈值处理转化为二值图像
_,img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
countours_tree , hierarchy_tree = cv2.findContours(img,mode = cv2.RETR_TREE,method = cv2.CHAIN_APPROX_NONE)n = len(countours_tree)
contourImg = []
cv2.imshow("orig",img)
for i in range(n):temp = np.zeros(img.shape,np.uint8)contourImg.append(temp)contourImg[i] = cv2.drawContours(contourImg[i],countours_tree,i,(255,255,255),5)cv2.imshow(f"contour[ {i}]",contourImg[i])
cv2.waitKey()
cv2.destroyAllWindows()
利用轮廓绘制功能,获取前景对象
这部分的案例使用pig.JPG图片,需要的可以直接复制,跟代码放在同一文件夹之下:
先讲解一下代码的思路,首先转化成灰度值和二值图像,然后获取轮廓,绘制整个轮廓,利用按位与运算与原图像进行按位与运算,提取前景对象。
import numpy as np
import cv2
bgr_img = cv2.imread("pig.JPG")
img = cv2.cvtColor(bgr_img,cv2.COLOR_BGR2GRAY)
# 先用高斯滤波平滑处理
img = cv2.GaussianBlur(img, (5, 5), 0)
# 再用阈值处理转化为二值图像
_,img = cv2.threshold(img, 128, 255, cv2.THRESH_BINARY)
countours_tree , hierarchy_tree = cv2.findContours(img,mode = cv2.RETR_TREE,method = cv2.CHAIN_APPROX_NONE)
mask = np.zeros(bgr_img.shape,np.uint8)
mask = cv2.drawContours(mask,countours_tree,-1,(255,255,255),-1)
loc = cv2.bitwise_and(mask,bgr_img)
cv2.imshow("mask",mask)
cv2.imshow("loc",loc)
cv2.waitKey()
cv2.destroyAllWindows()
致谢
本文参考了一些博主的文章,博取了他们的长处,也结合了我的一些经验,对他们表达诚挚的感谢,使我对 图像轮廓查找与绘制 有更深入的了解,也推荐大家去阅读一下他们的文章。纸上学来终觉浅,明知此事要躬行:
python+opencv基础篇——实现提取轮廓
相关文章:
OpenCV 图像轮廓查找与绘制全攻略:从函数使用到实战应用详解
摘要:本文详细介绍了 OpenCV 中用于查找图像轮廓的 cv2.findContours() 函数以及绘制轮廓的 cv2.drawContours() 函数的使用方法。涵盖 cv2.findContours() 各参数(如 mode 不同取值对应不同轮廓检索模式)及返回值的详细解析,搭配…...
微信小程序WXSS全局样式与局部样式的使用教程
微信小程序WXSS全局样式与局部样式的使用教程 引言 在微信小程序的开发中,样式的设计与实现是提升用户体验的关键部分。WXSS(WeiXin Style Sheets)作为微信小程序的样式表语言,不仅支持丰富的样式功能,还能通过全局样式与局部样式的灵活运用,帮助开发者构建美观且易于维…...
Leetcode142. 环形链表 II(HOT100)
链接 我的错误代码: class Solution { public:ListNode *detectCycle(ListNode *head) {if(!head||!head->next)return nullptr;ListNode* f head->next,*s head;while(f){f f->next,s s->next;if(!f)return nullptr;f f->next;if(fs){ListNo…...
Java程序基础⑤Java数组的定义和使用+引用的概念
目录 1. Java数组的基本概念 1.1 数组的定义 1.2 数组存在的意义 1.3 数组的使用 1.4 二维数组 2. 引用类型JVM的内存分布 2.1 JVM的内存分布 2.2 基本数据类型和引用型数据类型的区别 2.3 引用注意事项 2.4 传值传递 3. 数组总结和应用场景 3.1 一维数组和二维数组…...
丁真杯理塘大赛题解
前言:部分代码思路可能与题解思路不同,请勿强行带入 真蛰虫 原题链接 1.一道非常基础的数学题。 2.主要就是在考察分解质因数。首先看真蛰虫的质因数是不是包含了容器的所有质因数,如果没有,那么就不能放入容器中。如果全部包…...
FPGA经验谈系列文章——8、复位的设计
前言 剑法往往有着固定的招式套路,而写代码似乎也存在类似的情况。不知从何时起,众多 FPGA 工程师们在编写代码时开启了一种关于 always 语句块的流行写法,那就是: always @(posedge i_clk or negedge i_rstn) 就笔者所经历的诸多项目以及所接触到的不少工程师而言,大家在…...
Android studio与JS交互
文章目录 前言一、html二、使用步骤1.2.AS 总结 前言 最近在使用Android Studio的WebView,有些功能要AS与JS交互。 一、html html文件 <!DOCTYPE html> <html> <!--javascript--> <head><meta charset"utf-8"><title>Carson…...
健身房小程序服务渠道开展
健身不单单是锻炼身体、保持身材,也是一种社交方式,城市里门店不少,每家都有一定流量和老客,但仅靠传统线下拉客/自然流量前往和线上朋友圈、短视频发硬广等方式还不够。 商家需要找到更多潜在目标客户,而消费者也对门…...
大宗商品行业区块链应用
应用场景 区块链技术具有透明性、去中心化、不可篡改等特点,因此可以在大宗商品定价方面得到应用。通过区块链技术,相关交易的各方可以在无需依赖中心化第三方的情况下,实时、准确地获取定价信息。这种技术的应用能够提高效率、降低成本、提…...
软考教材重点内容 信息安全工程师 第 5 章 物理与环境安全技术
5.1.1 物理安全概念 传统上的物理安全也称为实体安全,是指包括环境、设备和记录介质在内的所有支持网络信息系统运行的硬件的总体安全,是网络信息系统安全、可靠、不间断运行的基本保证,并且确保在信息进行加工处理、服务、决策支持的过程中&…...
蓝桥杯每日真题 - 第21天
题目:(空间) 题目描述(12届 C&C B组A题) 解题思路: 转换单位: 内存总大小为 256MB,换算为字节: 25610241024268,435,456字节 计算每个整数占用空间: 每个 32 位整数占用…...
【C++】C++11新特性详解:可变参数模板与emplace系列的应用
C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriori…...
下载并安装Visual Studio 2017过程
一、下载 1、下载链接 下载链接:官方网址 先登录 往下滑找到较早的下载 2、进行搜索下载 或者直接点击🔗网站跳转 3、确认系统信息进行下载 二、安装 下载完成后右键使用管理员身份运行 1、点击同意后安装 2、若报错—设置失败 打开控制面板-&g…...
【消息序列】详解(6):深入探讨缓冲区管理与流量控制机制
目录 一、概述 1.1. 缓冲区管理的重要性 1.2. 实现方式 1.2.1. HCI_Read_Buffer_Size 命令 1.2.2. HCI_Number_Of_Completed_Packets 事件 1.2.3. HCI_Set_Controller_To_Host_Flow_Control 命令 1.2.4. HCI_Host_Buffer_Size 命令 1.2.5. HCI_Host_Number_Of_Complete…...
Java开发经验——Spring Test 常见错误
摘要 本文详细介绍了Java开发中Spring Test的常见错误和解决方案。文章首先概述了Spring中进行单元测试的多种方法,包括使用JUnit和Spring Boot Test进行集成测试,以及Mockito进行单元测试。接着,文章分析了Spring资源文件扫描不到的问题&am…...
麦肯锡报告 | 科技落地的真谛:超越技术本身的价值创造
科技创新正在以惊人的速度改变企业运作和客户体验,但实现其潜力的关键在于正确的策略、流程、文化和人才。麦肯锡强调了一个理念:Never just tech(不仅仅是技术)。这表明,成功的数字化转型不仅依赖于技术,还…...
React 常见问题解答:设置、安装、用户事件和最佳实践
在本文中,我们将回答您在开始使用 React 时可能会问的 9 个常见问题。 1、开始使用 React 需要哪些技能和知识? 在深入研究 React 之前,您应该对以下内容有深入的了解: HTML、CSS 和 JavaScript (ES6)&a…...
Mairadb 最大连接数、当前连接数 查询
目录 查询数据库 最大连接数 查询当前连接总数 环境 Mariadb 10.11.6 跳转mysql数据库: 查询数据库 最大连接数 show variables like max_connections; 注意; 这个版本不能使用 : show variables like ‘%max_connections%’; 会报错 ÿ…...
【R库包安装】R库包安装总结:conda、CRAN等
【R库包安装】R库包安装总结:conda、CRAN等 方法1:基于 R 的 CRAN 仓库安装CRAN库包查询从 CRAN 安装 方法2:使用conda安装库包确保已安装 R 和 Conda 环境使用 Conda 官网浏览是否存在相应库包Conda 安装 R 库 方法3:从 GitHub 安…...
php反序列化1_常见php序列化的CTF考题
声明: 以下多内容来自暗月师傅我是通过他的教程来学习记录的,如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考:php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…...
LabVIEW动态显示控件方案
在LabVIEW开发中,涉及到动态显示和控制界面的设计时,经常需要根据用户选择的不同参数来动态显示或隐藏相关控件。例如,某些能可能会根据“Type”控件的不同选择显示不同的参数,如“Target”、“Duration”和“EndType”等。在一个…...
游戏引擎学习第22天
移除 DllMain() 并成功重新编译 以下是对内容的详细复述与总结: 问题和解决方案: 在编译过程中遇到了一些问题,特别是如何告知编译器不要退出程序,而是继续处理。问题的根源在于编译过程中传递给链接器的参数设置不正确。原本尝试…...
GitLab|GitLab报错:PG::ConnectionBad: could not connect to server...
错误信息: PG::ConnectionBad: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"? /opt/gitlab/embedded/service…...
Ray 和 PyTorch
Ray 和 PyTorch 的介绍 Ray 是什么? Ray 是一个用于 分布式计算和机器学习任务 的开源框架,提供了一个高效的、灵活的并行计算平台。它的核心功能是支持分布式计算,帮助开发者以简单的方式扩展 Python 应用程序。 Ray 适用于以下场景&…...
Qt之详解QLockFile 文件锁
文章目录 QLockFile 详解前言什么是 QLockFile?QLockFile 的构造函数和常用成员函数构造函数1. 指定锁文件路径的构造函数 常用成员函数1. lock2. unlock3. isLocked4. setStaleLockTime5. getLockInfo6. removeStaleLock 完整示例代码总结 QLockFile 详解 前言 在…...
从0开始学PHP面向对象内容之常用设计模式(组合,外观,代理)
二、结构型设计模式 4、组合模式(Composite) 组合模式(Composite Pattern)是一种结构型设计模式,它将对象组合成树形结构以表示”部分–整体“的层次结构。通过组合模式,客户端可以以一致的方式处理单个对…...
机械设计学习资料
免费送大家学习资源,已整理好,仅供学习 下载网址: https://www.zzhlszk.com/?qZ02-%E6%9C%BA%E6%A2%B0%E8%AE%BE%E8%AE%A1%E8%A7%84%E8%8C%83SOP.zip...
论文笔记3-XCube: Large-Scale 3D Generative Modeling using Sparse Voxel Hierarchies
目录 Abtract 相关工作 核心算法: 整体流程概述 具体流程解析 1. 输入(Input) 2. 稀疏结构 VAE(Sparse Structure VAE) 3.分层体素潜在扩散(Hierarchical Voxel Latent Diffusion)…...
【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能
【组件】前端ElementUi 下拉Tree树形组件 带模糊搜索自动展开高亮功能 https://live.csdn.net/v/435737 <template><div><el-popoverstyle"overflow-y: auto; "placement"bottom"trigger"click"><el-inputstyle"margi…...
诠视科技受邀出席“中国虚拟现实产学研大会”
2024年11月2-3日,由中国虚拟现实技术与产业创新平台举办的第十届“中国虚拟现实产学研大会” 在北京顺利召开,大会围绕“虚拟现实技术与产业创新融合”这一主题进行深入探讨。诠视科技作为虚拟现实产业的创新领军企业,CEO林瓊受邀参加本次活动…...
【达梦数据库】授权查询
目录 授权查询EXPIRED_DATECLUSTER_TYPE 更换原则更换方法 授权查询 select * from v$license;EXPIRED_DATE 过期日期,如果是正式版会显示NULL CLUSTER_TYPE 授权使用的集群类型CLUSTER_TYPE,格式为字符串“XXXX”, 每一位上 0 表示禁止…...
探索 ZED 双目 3D 相机发展:ZED 2i 的创新功能扩展之路
在科技迅速发展的当下,3D 视觉技术在众多领域的发展中有着重要作用。Stereolabs 公司研发的 ZED 相机受到广泛关注。Stereolabs 于 2010 年在美国旧金山成立,一直专注于立体视觉和 3D 深度相机技术的研究。2015 年推出的 ZED 相机为无人机、机器人等设备…...
基于卷积神经网络的白菜病虫害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】
更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 白菜病虫害识别与防治系统,卷积神经网络,resnet50,mobilenet【pytorch框架,python源码】_哔哩哔哩_bilibili (一)简介 基于卷…...
计算机网络 | 7.网络安全
1.网络安全问题概述 (1)计算机网络面临的安全性威胁 <1>计算机网络面临的完全性威胁 计算机网络面临的两大类安全威胁:被动攻击和主动攻击 被动攻击 截获:从网络上窃听他人的通信内容。主动攻击 篡改:故意篡改…...
Opencv+ROS自编相机驱动
目录 一、工具 二、原理 代码 标定 三、总结 参考: 一、工具 opencv2ros ubuntu18.04 usb摄像头 二、原理 这里模仿usb_cam功能包对Opencv_ros进行修饰,加上相机参数和相机状态,难点在于相机参数的读取。 对于相机参数话题 camera…...
js---函数参数是值传递还是引用传递
理解1:都是值(基本/地址值)传递 理解2:可能是值传递,也可能是引用传递(地址值) 在JavaScript中,函数参数的传递方式取决于参数的类型: 值传递(Pass by Val…...
如何解决DDoS导致服务器宕机?
分布式拒绝服务攻击(DDoS攻击)是一种常见的网络安全威胁,通过大量恶意流量使目标服务器无法提供正常服务。DDoS攻击可能导致服务器宕机,严重影响业务的正常运行。本文将详细介绍如何检测和防御DDoS攻击,防止服务器宕机…...
临床检验项目指标学习笔记
声明: 家有病人,记录此学习笔记仅为了更好照顾家人。本文不负责内容的准确性和版权。如果存在侵权、或不希望被转载的媒体或个人可与我们联系,我将立即进行删除处理。 血脂四项 [Q&A] 血脂四项 指导意义 测定血清中血脂含量,…...
代码管理之Gitlab
文章目录 Git基础概述场景本地修改未提交,拉取远程代码修改提交本地,远程已有新提交 GitIDEA引入Git拉取仓库代码最后位置 Git基础 概述 workspace 工作区:本地电脑上看到的目录; repository 本地仓库:就是工作区中隐…...
秒杀系统三层架构设计:缓存、消息队列与数据库
秒杀是一种极端高并发场景,短时间内数百万用户涌入,抢购有限库存的商品。为了保证系统稳定性和数据一致性,同时提升用户体验,我们可以设计一个三层架构:缓存层、消息队列层、数据库层。本文将详细设计这一架构并探讨其…...
tauri2.0版本开发苹果ios和安卓android应用,环境搭建和最后编译为apk
官网链接:What is Tauri? | Tauri 初始准备 rust版本一定要1.77.2以上的版本,查看版本和升级版本: 升级命名: rustup update 不然会报错: error: package tauri-plugin-shell v2.0.2 cannot be built because it r…...
SCI论文部分题目
SC20243213 通过氢和氨集成增强Power-to-X灵活性和可持续成本降低:绿色实验室Skive案例研究 SC20243211 分析同时发电的综合系统中的能量和能量效率、环境影响和经济可行性,淡水、热水和天然气凝液 SC20243208 双燃料生物质-天然气系统中的氢、…...
使用PyTorch在AMD GPU上进行INT8量化实现精简化的LLM推理
Leaner LLM Inference with INT8 Quantization on AMD GPUs using PyTorch — ROCm Blogs 随着大型语言模型(LLMs)规模达到数千亿参数,我们在这些庞大模型中表示数据的方式极大地影响了训练所需的资源(例如,用于推理的…...
Solon 拉取 maven 包很慢或拉不了,怎么办?
注意:如果在 IDEA 设置里指定了 settings.xml,下面两个方案可能会失效。(或者直接拿 "腾讯" 的镜像仓库地址,按自己的习惯配置) 1、可以在项目的 pom.xml 添加 "腾讯" 的镜像仓库 "阿里&qu…...
spring的事务隔离?
在Spring中,事务的隔离级别是指在多事务并发执行时,事务之间的隔离程度,隔离级别定义了一个事务可以看到另一个事务的哪些数据,Spring事务管理器允许通过Transactional注解或者xml配置来指定事务的隔离级别。 事务的隔离级别有以…...
13 —— 开发环境调错-source map
问题:代码被压缩后,无法正确定位源代码的位置(行数和列数) source map:准确追踪error和warning在原始代码的位置 —— webpack.config.js配置devtool选项 module.exports { devtool: inline-source-map }; inline-s…...
【大数据分析深度学习】在Hadoop上实现分布式深度学习
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…...
【Linux探索学习】第十六弹——进程地址空间:深入解析操作系统中的进程地址空间
Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 进程地址空间是操作系统进程管理的重要概念之一,它定义了进程在执行时所能访问的内存布局。理解进程地址空间不仅有助于掌握操…...
【数据结构与算法】相交链表、环形链表(判断是否有环)、环形链表(返回入环节点)
主页:HABUO🍁主页:HABUO 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 1.相交链表 题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表…...
hubuctf-2024校赛-复现wp
web easyweb1 <?php error_reporting(0); highlight_file(__FILE__);$flag getenv("GZCTF_FLAG");if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("You are failed.");}if(intval($num)){echo $flag;} } 利…...