Python+OpenCV裂缝面积识别系统(部署教程&源码)

news2024/9/26 5:17:23

1.研究背景与意义

随着科技的不断发展,计算机视觉技术在各个领域中得到了广泛的应用。其中,图像处理是计算机视觉中的一个重要分支,它通过对图像进行数字化处理,提取出其中的有用信息,为后续的分析和应用提供支持。而裂缝面积识别系统是图像处理中的一个重要应用,它可以对裂缝进行自动化的检测和识别,为工程领域中的裂缝维护和修复提供帮助。

裂缝是建筑物和基础设施中常见的问题,它们的存在会对结构的稳定性和安全性产生重大影响。因此,及早发现和修复裂缝是非常重要的。然而,传统的裂缝检测方法通常需要人工参与,费时费力且容易出错。因此,开发一种自动化的裂缝面积识别系统具有重要的意义。

Python是一种简单易学且功能强大的编程语言,而OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和分析功能。将Python和OpenCV结合起来,可以快速开发出高效的图像处理算法,为裂缝面积识别系统的开发提供了便利。

本研究的目标是开发一个基于Python和OpenCV的裂缝面积识别系统,并提供相应的部署教程和源码。该系统将通过图像处理算法自动检测和识别裂缝,并计算出裂缝的面积。通过该系统,用户可以快速准确地获取裂缝的面积信息,为后续的维护和修复工作提供参考。

本研究的意义主要体现在以下几个方面:

  1. 提高工作效率:传统的裂缝检测方法需要人工参与,费时费力且容易出错。而基于Python和OpenCV的裂缝面积识别系统可以实现自动化的裂缝检测和识别,大大提高了工作效率。

  2. 提高准确性:人工参与的裂缝检测容易受到主观因素的影响,结果的准确性无法保证。而基于图像处理算法的裂缝面积识别系统可以准确地计算出裂缝的面积,提高了结果的准确性。

  3. 降低成本:传统的裂缝检测方法需要大量的人力和时间投入,成本较高。而基于Python和OpenCV的裂缝面积识别系统可以实现自动化的裂缝检测和识别,降低了成本。

  4. 推动技术发展:本研究将Python和OpenCV应用于裂缝面积识别系统的开发,为相关领域的技术发展提供了一个实践案例。同时,提供部署教程和源码,可以为其他研究者和开发者提供参考和借鉴。

综上所述,基于Python和OpenCV的裂缝面积识别系统具有重要的研究意义和实际应用价值。通过该系统的开发和推广应用,可以提高工作效率、准确性和降低成本,推动相关领域的技术发展。

2.图片演示

2.png

3.png

4.png

3.视频演示

Python+OpenCV裂缝面积识别系统(部署教程&源码)_哔哩哔哩_bilibili

4.系统流程图

本文通过计算机视觉技术处理图像,期望达到人工检测的效果,满足实际需求,并且避免人工检测存在的效率低、危险及易受人为主观因素影响等不足。路面裂缝检测主要有以下三个方面功能需求:
(1)对一幅路面图像无需人为肉眼辨别,可自动检测有无裂缝并标出裂缝所在区域。(2)对存在裂缝的图像提取出裂缝。
(3)自动识别裂缝类型,并计算相应参数。
因此采用的计算机视觉技术具体流程如图所示。
image.png
得到图像后首先要对图像预处理以提高图像质量。灰度化减少图像数据量、提高处理速度;为增强裂缝与背景的对比度,本文对直方图均衡化、分段线性法和 gamma校正处理的效果做了对比,最后选用gamma校正做对比度增强处理;为减少路面非裂缝区的噪声干扰,本文对均值滤波、中值滤波、高斯滤波和双边滤波处理图像的效果做了对比,最后结合路面噪声特性以及各类滤波算法的特性,通过先做中值滤波再做双边滤波完成去噪,降低检测裂缝有无及裂缝提取工作的难度。
预处理后检测图像中有无裂缝,标记有裂缝的区域。训练一个机器学习分类模型,用这个机器学习模型检测图像中是否存在裂缝,实现自动检测功能。通过将图像分成多个小块,检测每个小块中是否存在裂缝,如果存在裂缝,则对这个小块做标记,如果不存在则不做标记,完成裂缝定位工作。
对于存在裂缝的图像,要提取裂缝、识别裂缝类型并计算其相应的参数。通过局部自适应阈值分割算法将裂缝及灰度与裂缝相近的图像块分割出,然后提取图像中连通域轮廓,计算连通域轮廓参数,筛选出裂缝连通域去除噪声连通域。提取出裂缝后识别裂缝类型,本文对投影法识别裂缝类型的方式做了改进,引入面积特征,利用投影特征识别出横向、纵向裂缝,对非横、纵向裂缝图像以一个较大的结构做形态学闭运算后,以此时的裂缝面积作为识别标准识别出斜向、网状裂缝。对线性裂缝计算长度和最大宽度,将裂缝细化提取骨架,统计裂缝骨架上的像素数作为长度,每次腐蚀会剥离裂缝最外面一层,统计完全去除裂缝需要的腐蚀次数,将其乘上2得到裂缝的最大宽度;对网状裂缝计算其分布面积,通过求裂缝凸包面积来近似裂缝分布面积,这种方式优于传统求外接矩形面积来近似裂缝面积的方式。

5.核心代码讲解

5.1 CrackDetection.py

下面是封装为类后的代码:


class CrackDetector:
    def __init__(self, input_image_path, output_image_path):
        self.input_image_path = input_image_path
        self.output_image_path = output_image_path

    def detect_cracks(self):
        # Read input image
        img = cv2.imread(self.input_image_path)

        # Convert into gray scale
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

        # Image processing (smoothing)
        blur = cv2.blur(gray, (3, 3))

        # Apply logarithmic transform
        img_log = (np.log(blur + 1) / (np.log(1 + np.max(blur)))) * 255
        img_log = np.array(img_log, dtype=np.uint8)

        # Image smoothing: bilateral filter
        bilateral = cv2.bilateralFilter(img_log, 5, 75, 75)

        # Canny Edge Detection
        edges = cv2.Canny(bilateral, 100, 200)

        # Morphological Closing Operator
        kernel = np.ones((5, 5), np.uint8)
        closing = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)

        # Create feature detecting method
        orb = cv2.ORB_create(nfeatures=1500)
        ......

这个类封装了图像裂缝检测的功能,通过调用detect_cracks方法可以进行裂缝检测并保存结果图像。

这个程序文件名为CrackDetection.py,主要功能是对裂纹图像进行裂纹检测。

程序首先导入了必要的库,包括numpy、cv2和matplotlib.pyplot。

然后,程序读取了一个裂纹样本图像,将其转换为灰度图像。

接下来,程序对图像进行了一系列的图像处理操作。首先进行了平滑处理,使用了均值滤波器进行图像平滑。然后,应用了对数变换,将图像进行了对数变换,增强了图像的对比度。接着,使用双边滤波器对图像进行了平滑处理。然后,使用Canny边缘检测算法对图像进行了边缘检测。最后,使用形态学闭运算算子对边缘图像进行了形态学闭运算。

接下来,程序创建了一个特征检测方法,使用了ORB算法进行特征检测。然后,程序使用ORB算法检测并计算了图像的关键点和描述符,并绘制了关键点的特征图像。

最后,程序将输出的特征图像保存为文件,并使用plot函数显示原始图像和输出图像。

5.2 crack_detect_opencv.py

class CrackDetector:
    def __init__(self, image_path):
        self.image_path = image_path
        self.with_nmsup = True
        self.fudgefactor = 1.8
        self.sigma = 21
        self.kernel = 2 * math.ceil(2 * self.sigma) + 1

    def orientated_non_max_suppression(self, mag, ang):
        ang_quant = np.round(ang / (np.pi/4)) % 4
        winE = np.array([[0, 0, 0],[1, 1, 1], [0, 0, 0]])
        winSE = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
        winS = np.array([[0, 1, 0], [0, 1, 0], [0, 1, 0]])
        winSW = np.array([[0, 0, 1], [0, 1, 0], [1, 0, 0]])

        magE = self.non_max_suppression(mag, winE)
        magSE = self.non_max_suppression(mag, winSE)
        magS = self.non_max_suppression(mag, winS)
        magSW = self.non_max_suppression(mag, winSW)

        mag[ang_quant == 0] = magE[ang_quant == 0]
        mag[ang_quant == 1] = magSE[ang_quant == 1]
        mag[ang_quant == 2] = magS[ang_quant == 2]
        mag[ang_quant == 3] = magSW[ang_quant == 3]
        return mag

    def non_max_suppression(self, data, win):
        data_max = scipy.ndimage.filters.maximum_filter(data, footprint=win, mode='constant')
        data_max[data != data_max] = 0
        return data_max

    def detect_cracks(self):
        gray_image = cv2.imread(self.image_path, 0)

        gray_image = gray_image / 255.0
        blur = cv2.GaussianBlur(gray_image, (self.kernel, self.kernel), self.sigma)
        gray_image = cv2.subtract(gray_image, blur)

        sobelx = cv2.Sobel(gray_image, cv2.CV_64F, 1, 0, ksize=3)
        sobely = cv2.Sobel(gray_image, cv2.CV_64F, 0, 1, ksize=3)
        mag = np.hypot(sobelx, sobely)
        ang = np.arctan2(sobely, sobelx)

        threshold = 4 * self.fudgefactor * np.mean(mag)
        mag[mag < threshold] = 0
        ......

这个程序文件是用于检测裂缝的,文件名为crack_detect_opencv.py。它使用了OpenCV库来进行图像处理和计算。主要的功能包括:

  1. 导入所需的库和模块。
  2. 定义了一个函数orientated_non_max_suppression,用于进行方向非极大值抑制。
  3. 定义了一个函数non_max_suppression,用于进行非极大值抑制。
  4. 读取灰度图像。
  5. 对图像进行预处理,包括应用高斯模糊、减去模糊图像、计算Sobel响应等。
  6. 对Sobel响应进行阈值处理。
  7. 根据是否应用非极大值抑制,进行不同的处理。
  8. 显示处理结果。

整个程序的目的是检测图像中的裂缝,并将结果显示出来。

6.系统整体结构

整体功能和构架概括:

这个工程是一个裂缝面积识别系统,主要用于检测和分析图像中的裂缝。它包含了多个程序文件,每个文件负责不同的功能。其中,CrackDetection.py文件用于裂缝检测,crack_detect_opencv.py文件用于裂缝检测和处理,main.py文件用于处理和分析图片中的裂缝,ui.py文件是一个基于PyQt5的图形用户界面程序,用于运行目标检测模型。

下表整理了每个文件的功能:

文件名功能
CrackDetection.py对裂缝图像进行裂缝检测的程序,包括图像处理和特征检测
crack_detect_opencv.py检测裂缝的程序,使用OpenCV库进行图像处理和计算
main.py处理和分析图片中的裂缝的程序,包括图像处理、轮廓提取和面积计算
ui.py基于PyQt5的图形用户界面程序,用于运行裂缝检测模型

以上是对每个文件的简要功能概述,每个文件的具体实现可能还包含其他细节和辅助函数。

7.图像预处理流程

每个图像都可以视为一个矩阵,图像中的像素就是矩阵中的数,图像中包含了大量的数据。对图像处理需要对矩阵中所有数据处理,计算量非常大,而且图像中目标信息往往比较少,存在大量的无用信息。为了方便后续的裂缝检测提取工作,首先要对采集到的图像做预处理,以提高图像质量。预处理主要分为以下三个方面:
(⑴图像灰度化,将三通道图像变为单通道图像,灰度图保留了彩色图相同的像素亮度信息,且只有单个通道,处理灰度图计算量会大大减少,同时保留了大部分的图像信息,因此本文先对图像灰度化后再做后续处理。
(2)对比度增强,因图像采集设备和采集环境等因素,最初采集到的图像裂缝和背景的对比度较低,要增强对比度。
(3)去噪,路面本身就存在各种不规则的噪声,摄像机获取图像过程中又会引入一些新的噪声,大量的噪声极大的增加了检测提取裂缝的难度,要通过滤波算法减少图像中的噪声干扰。
如图所示是路面图像的预处理流程图。
image.png

8.直方图均衡化

直方图均衡化就是调整图像中像素灰度直方图中灰度的分布范围,改变原来图像中像素灰度集中在某个区域的现象,让所有像系仕0度值的汜团内均习力,心到本小N图像对比度增强的效果[7]。直方图均衡化本质上就是对原始图像像素分布直方图做非线性拉伸,增大像素的分布范围,属于对图像的一种空域处理方式可以将直方图均衡化对图像的操作做这样的归纳:设f(xy)是点(t,y)处图像的灰度值,g(xy)是处理后的图像的灰度值,像素的范围是О到L-1,这样的一个变化可以通过映射函数得到,这个映射函数必须满足这样两个条件:
(1)当0≤f(x,y)≤L-1时,映射函数是单调函数,保证灰度级的顺序不变,原来怎样的顺序变化后还是这个顺序。
(2)当0≤f(x, y)≤L-1时,满足0≤g(x,y)≤L-1,保证变化后图像像素的范围与之前一样。对原始图做直方图均衡化处理的过程如公式所示。
image.png
image.png

比较图可以看出,原图像的直方图有明显的峰值,均衡化处理后峰值变得不明显像素分布也变得比较均匀。一幅路面图像其原始图和对其做直方图均衡化的效果如图所示。
image.png

9.轮廓跟踪与筛选

经局部自适应阈值分割处理后得到一个二值图像,图像中不仅存在裂缝区域,还存在不少噪声块,这些噪声块和裂缝区域一样也属于局部灰度极值点。这些噪声点有的比较大,一般的滤波去噪方式难以去除。本文通过图像中连通域的形状和面积特征筛选出裂缝区域和噪声区域,首先要提取连通域轮廓,然后计算连通域轮廓的圆形度和面积,筛选出裂缝区域。
本文通过OpenCV中提供的 findContours函数提取二值图像中连通域的轮廓,函数findContours的理论依据是文献[54]中提到的算法。文中提到了两种算法对二值图像做拓扑分析,第一种算法用编码的方式确定图像的外层边界、内部孔边界以及内外层边界的层次关系,然后用边界表示原图像。第二种算法基于第一种算法,所求的只是最外层边界。编码的思想是:对不同边界赋不同值,来区别这两个边界及确定层次关系。输入图像是一个二值图像,设f(ij)为图像上像素值,对这个二值图像逐行做扫描当f(ij-1)=0且f(i.j)=1时,把f(i.j)视为外边界的起点,当fi,j)≥1且f(i.j+I)=0时,将f(,y)视为孔边界的起点。将初始边界作为起始位置标记边界像素,当扫描得到一个新的边界点时,为其分配一个标识NBD初始值为1,当遇到fip.q)=l,f(p,q+I)时,将f(p.q)的标识符设为-NBD,这就标志着边界的终止。
用findContours 函数得到轮廓后,将得到的轮廓存储在C++的STL容器Vector中,存储的数据类型是vector型的,因为每一个跟踪得到的轮廓都是一个个像素点组成的,每个像素点存储在vector里面。得到了这些轮廓之后就要设定一些参数来区分裂缝和噪声,从而筛选出裂缝去掉噪声,设定的参数有:
⑴连通域面积:A
通过opencv中提供的cvContourArea函数可求得连通域轮廓的面积。
(2)圆形度:R
圆形度本质上表示的当前目标形状与圆的相似程度,一般来说越是复杂的边界其圆形度就会越小,圆形度表达式如公式所示。
image.png
公式中A表示连通域轮廓的面积,L表示这个连通域轮廓的周长,利用OpenCV
中提供的cvContourPerimeter函数能得到连通域轮廓的周长。根据上式可以看出,目标越接近圆那么它的圆形度就越大,如果目标为圆形那它的圆形度就是1。
本文通过这两个参数来筛选连通域区分裂缝和噪声,最后将裂缝保留去掉噪声。对于裂缝,它的连通域的轮廓应该满足以下条件:
(1)面积比较大。通过之前的分割处理,留下的噪声点大多数面积会比较小,相对来说裂缝区域面积就比较大。
(2)圆形度较小。裂缝区域连通域的轮廓会比较复杂、不规则,某种程度上会显示出一定的线性特点,圆形度就比较小;而噪声在多数情况下是块状的,这样圆形度就比较大。
最后将删除了噪声后保留下来的轮廓重新绘制到一个新的图像上,用OpenCV中的drawContours 函数绘制轮廓。本文设定的圆形度是0.25,将圆形度大于0.25连通域删去,本文设定的面积参数取的是50个像素,将面积小于50个像素的连通域去掉,最后得到的结果如图所示。
image.png

10.系统整合

下图完整源码&环境部署视频教程&数据集&自定义UI界面
1.png

参考博客《Python+OpenCV裂缝面积识别系统(部署教程&源码)》

11.参考文献


[1]张磊.基于图像处理的公路路面裂缝检测技术研究[J].机械设计与制造工程.2017,(2).DOI:10.3969/j.issn.2095-509X.2017.02.019.

[2]朱力强,王春薇,王耀东,等.基于特征点集距离描述的裂缝图像匹配算法研究[J].仪器仪表学报.2016,(12).

[3]钱彬,唐振民,沈肖波,等.基于多特征流形学习和矩阵分解的路面裂缝检测[J].仪器仪表学报.2016,(7).DOI:10.3969/j.issn.0254-3087.2016.07.025.

[4]张宏,英红.频域滤波的水泥路面图像降噪增强方法[J].土木建筑与环境工程.2015,(3).DOI:10.11835/j.issn.1674-4764.2015.03.007.

[5]李爱霞,管海燕,钟良,等.基于张量投票的道路表面裂缝检测[J].应用科学学报.2015,(5).DOI:10.3969/j.issn.0255-8297.2015.05.008.

[6]姒绍辉,胡伏原,顾亚军,等.一种基于不规则区域的高斯滤波去噪算法[J].计算机科学.2014,(11).DOI:10.11896/j.issn.1002-137X.2014.11.062.

[7]杨洋,王卫星.基于差分计盒法和数学形态学的路面裂缝分割和提取方法[J].科学技术与工程.2013,(23).DOI:10.3969/j.issn.1671-1815.2013.23.017.

[8]李小红,谢成明,贾易臻,等.基于ORB特征的快速目标检测算法[J].电子测量与仪器学报.2013,(5).DOI:10.3724/SP.J.1187.2013.00455.

[9]XU Xue-jun,ZHANG Xiao-ning.Crack detection of reinforced concrete bridge using video image[J].中南大学学报(英文版).2013,(9).DOI:10.1007/s11771-013-1775-5.

[10]黎蔚,高璐.基于改进的分水岭算法的路面裂缝检测[J].计算机工程与应用.2013,(20).DOI:10.3778/j.issn.1002-8331.1210-0221.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1236315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git——感谢尚硅谷官方文档

Git——尚硅谷学习笔记 第1章 Git 概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git 简史1.5 Git 工作机制1.6 Git 和代码托管中心 第2章 Git 安装第 3 章 Git 常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.4.1 将工作区的文…

大数据平台红蓝对抗 - 磨利刃,淬精兵! | 京东云技术团队

一、背景 目前大促备战常见备战工作&#xff1a;专项压测&#xff08;全链路压测、内部压测&#xff09;、灾备演练、降级演练、限流、巡检&#xff08;监控、应用健康度&#xff09;、混沌演练&#xff08;红蓝对抗&#xff09;&#xff0c;如下图所示。随着平台业务越来越复…

限时开发、码力全开、2w奖金!AGI Hackathon等你挑战!

AGI时代&#xff0c;我们已不再满足于简单的产品开发&#xff0c;与大模型结合的无限想象力&#xff0c;成为开发者们新的追求。 你有能力将想法转化为现实吗&#xff1f;你有勇气接受挑战&#xff0c;创造全新的AI应用吗&#xff1f; 如果你有热情&#xff0c;有信心&#xff…

深度学习之生成唐诗案例(Pytorch版)

主要思路&#xff1a; 对于唐诗生成来说&#xff0c;我们定义一个"S" 和 "E"作为开始和结束。 示例的唐诗大概有40000多首&#xff0c; 首先数据预处理&#xff0c;将唐诗加载到内存&#xff0c;生成对应的word2idx、idx2word、以及唐诗按顺序的字序列。…

注册中心CAP架构剖析

Nacos 支持 AP 或 CP AP Nacos 通过临时节点实现 AP 架构&#xff0c;将服务列表放在内存中&#xff1b; CP Nacos 通过持久化节点实现 CP 架构&#xff0c;将服务列表放在文件中&#xff0c;并同步到内存&#xff0c;通过 Raft 协议算法实现&#xff1b; 通过配置 epheme…

中科创达:所有产品都可以用生成式AI重做一遍

对于制造企业的数字化转型来说&#xff0c;生成式AI究竟具备怎样的意义和价值&#xff1f; 在与亚马逊云科技的合作中&#xff0c;中科创达对此有着深刻的领会和感悟。 生成式AI助力制造业数字化转型 “科技是第一生产力”&#xff0c;对于这句脍炙人口的名言&#xff0c;制造企…

x shell 用作串口调试助手

x shell 用作串口调试助手 Xshell 介绍 是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Wi…

PDF文件无密码,如何解密?

PDF文件有两种密码&#xff0c;一个打开密码、一个限制编辑密码&#xff0c;因为PDF文件设置了密码&#xff0c;那么打开、编辑PDF文件就会受到限制。想要解密&#xff0c;我们需要输入正确的密码&#xff0c;但是有时候我们可能会出现忘记密码的情况&#xff0c;或者网上下载P…

tomcat (SCI)ServletContainerInitializer 的加载原理

问题&#xff1a;使用WebScoket的时候发现通过ServerEndpoint方式注册上去的url无法访问&#xff0c;报错404 经过排查发现在WsServerContainer这个类中的addEndpoint方法一直没有触发ServerEndpoint注解的扫描 通过该方法来源于StandardContext.startInternal()方法的调用如下…

基于单片机仓库温湿度监测报警系统仿真设计

**单片机设计介绍&#xff0c;基于单片机仓库温湿度监测报警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的仓库温湿度监测报警系统可以被设计成能够实时监测仓库内的温度和湿度&#xff0c;并根据预设…

steamui.dll找不到指定模块,要怎么修复steamui.dll文件

当我们使用Steam进行游戏时&#xff0c;有时可能会面对一些令人无奈的技术问题。一种常见的问题是“找不到指定模块steamui.dll”&#xff0c;这可能是由于缺少文件、文件损坏或软件冲突等原因导致。但别担心&#xff0c;这篇文章将提供几种解决此问题的方法&#xff0c;并针对…

设计模式总结-笔记

一个目标&#xff1a;管理变化&#xff0c;提供复用&#xff01; 两种手段&#xff1a;分解vs.抽象 八大原则&#xff1a; 依赖倒置原则&#xff08;DIP&#xff09; 开放封闭原则&#xff08;OCP&#xff09; 单一职责原则&#xff08;SRP&#xff09; Liskov替换原则&a…

【Qt一坑】qt编译出现“常量中有换行符”

在qt编译过程中出现“常量中有换行符”&#xff0c;原因有以下几点&#xff08;qt版本5.14.2&#xff09;&#xff1a; 1.中文编码格式问题&#xff0c;将UTF-8编码格式改成 UTF-8 BOM。 或者使用QtCreator 进行如下设置&#xff08;找到Qt的左边列表里的项目&#xff0c;下的…

git -1

1.创建第一个仓库并配置local用户信息 git config git config --global 对当前用户所有仓库有效 git config --system 对系统所有登录的用户有效 git config --local 只对某个仓库有效 git config --list 显示配置 git config --list --global 所有仓库 git config --list…

Vue3鼠标拖拽生成区域块并选中元素

Vue3鼠标拖拽生成区域块并选中元素&#xff0c;选中的元素则背景高亮(或者其它逻辑)。 <script setup> import { ref } from vue// 区域ref const regionRef ref(null)// 内容ref const itemRefs ref(null)// 是否开启绘画区域 const enable ref(false)// 鼠标开始位置…

第十二章 pytorch中使用tensorboard进行可视化(工具)

PyTorch 从 1.2.0 版本开始&#xff0c;正式自带内置的 Tensorboard 支持了&#xff0c;我们可以不再依赖第三方工具来进行可视化。 tensorboard官方教程地址&#xff1a;https://github.com/tensorflow/tensorboard/blob/master/README.md 1、tensorboard 下载 step 1 此次…

时间复杂度和运算

时间复杂度 在算法和数据结构中&#xff0c;有许多时间复杂度比 O(1) 更差的情况。以下是一些常见的时间复杂度&#xff0c;按照从最优到最差的顺序排列&#xff1a; O(1)&#xff1a; 常数时间复杂度&#xff0c;操作的运行时间与输入规模无关&#xff0c;是最理想的情况。 O…

源码安装Apache

一、下载Apache,源码安装Apache #下载 [rootlocalhost opt]# wget -c https://mirrors.aliyun.com/apache/httpd/httpd-2.4.58.tar.gz [rootlocalhost opt]# ls httpd-2.4.58.tar.gz [rootlocalhost opt]# tar -xf httpd-2.4.58.tar.gz [rootlocalhost opt]# ls httpd-2.4.58…

移远通信推出六款新型天线,为物联网客户带来更丰富的产品选择

近日&#xff0c;移远通信重磅推出六款新型天线&#xff0c;覆盖5G、非地面网络&#xff08;NTN&#xff09;等多种新技术&#xff0c;将为物联网终端等产品带来全新功能和更强大的连接性能。 移远通信COO张栋表示&#xff1a;“当前&#xff0c;物联网应用除了需要高性能的天线…

【Docker】从零开始:4.为什么Docker会比VM虚拟机快

【Docker】从零开始&#xff1a;4.为什么Docker会比VM虚拟机快 docker有着比虚拟机更少的抽象层docker利用的是宿主机的内核,而不需要加载操作系统OS内核 docker有着比虚拟机更少的抽象层 由于docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接…