计算机视觉实验:图像处理综合-路沿检测

news/2024/5/20 16:47:30

目录

实验步骤与过程

1. 路沿检测方法设计

2. 路沿检测方法实现

2.1 视频图像提取

2.2 图像预处理

2.3 兴趣区域提取

2.4 边缘检测

​​​​​​​2.5 Hough变换

​​​​​​​2.6 线条过滤与图像输出

3. 路沿检测结果展示

4. 其他路沿检测方法

实验结论或体会

实验内容:针对给定的视频,利用图像处理基本方法实现道路路沿的检测;

提示:可利用Hough变换进行线检测,融合路沿的结构信息实现路沿边界定位(图中红色的点位置)。

 

实验步骤与过程

1. 路沿检测方法设计

图1 路沿检测方法思路图

对于路沿检测,整体思路如上所示。首先利用opencv提取出视频中的每一帧,然后对每一帧图像进行预处理。此处的预处理包含了灰度变换、图像二值化、均值滤波、再次二值化等,其目的主要在于将图像处理成路沿较容易被识别出来的状态。对图像进行预处理后需要进行兴趣区域提取。此处的兴趣区域提取,我首先根据图像的几何信息规定了一个大概的范围,然后再通过Hough变换找出路基与路标线的区域最后将此区域作为最后的兴趣区域。最后再进行常规的边缘检测与hough变换,并对结果进行过滤即可较好地检测出路沿。

2. 路沿检测方法实现

下面将根据上面的路沿检测方法的设计进行具体的实现。

2.1 视频图像提取

  • 由视频属性说明

由于视频是由一帧一帧的图像所组成的,所以对一个视频做路沿检测相当于对每一帧图像都做路沿检测。一般每秒中视频有24、25、30、60帧图像,帧数越多视频越顺滑但是处理的数据量也越大。在本次实验提供的视频中,根据属性查看可知其帧数为24帧/s,其属性如下图图2所示。

图2 视频属性

  • opencv帧数提取

在opencv中提供了一个模块用于提取视频中的每一帧,这个模块叫做Videocapture,其拥有一个必要参数——视频的地址。在建立videocapture对象后,调用其read函数其即可以以迭代器的方式返回每一帧图像。下面为videocapture的一个使用案例。

  1. import cv2
  2. 打开视频文件
  3. cap = cv2.VideoCapture('./实验2实验数据/01.avi')
  4. 逐帧读取视频
  5. while True:
  6.     ret, frame = cap.read()
  7.     if not ret:
  8.         break
  9.     处理当前帧
  10.     cv2.imshow('Frame', frame)
  11.     cv2.waitKey(1)
  12. 释放资源
  13. cap.release()
  14. cv2.destroyAllWindows()

2.2 图像预处理

  • 灰度变换

所提供的视频均为拥有RGB三通道的彩色视频,而在检测边缘中或许只需要一个通道即灰度图即可。当通道变多时颜色信息或许作用并不大,而且可能会影响边缘的判别。同时将图像变成灰度图还可以加快处理速度,节省计算资源。因此此处将图像转变成灰度图[1]。此处可以使用下面公式进行灰度变换:

Gray = R*0.299 + G*0.587 + B*0.114

同时也可利用opencv自带的函数进行变换,其原理一致,案例代码如下。

  1. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

变换前后结果如下面两图所示,可以看到去除颜色后更容易分辨道路的边界而去除周围无用信息的影响。

图3 灰度变换前

图4 灰度变换后

  • 二值化

从图像中进行观察可以清晰地看到路沿有一个重要的特征就是拥有阴影与明显地轮廓特征(表现为颜色微小地颜色变化)。因此可以利用以上的特征对图像进行处理,首先至少使得人眼可明显观察得到粗略的路沿区域。那么想到的方法是对图像进行二值化,下面进行具体的试验。首先将阈值设置为一半即127可以看到结果如图x所示,而将阈值设置为200时其结果如图x所示,可以看到前者可以清晰看出近处的路沿,而后者可以看到整条道路的路沿,但是十分粗糙,于是调整阈值以获得最佳值。

图5 二值化阈值为127时的图像

图6 二值化阈值为200时的图像

从120至200逐一调整后,发现阈值为185时较佳,其结果如下所示。

图7 阈值为185时的二值化图像

可以清晰看出路沿的轮廓,但是其四周却存在部分阴影,因此可以对其进行多次均值滤波后再次二值化去除,其步骤见均值二值化处理。

  • 均值滤波二值化

在前面的图中可以清晰看出路沿的轮廓,但是轮廓周边却存在一些干扰的黑线,如下图所示。

图8 轮廓周边的黑线

因此可以尝试对二值化后的图像进行均值滤波,对这些黑边的灰度值进行弱化,然后再进行一次二值化即可去掉黑边。

  1. 对整幅图像进行均值二值化处理,并将参数调整至最佳其结果如下所示、

图9 均值二值化处理

可以发现四周的黑边去除了,但是同时远处的轮廓线也没了.因此对整张图进行均值滤波后再二值化会存在问题.于是考虑到在远处黑边的影响比较小,而且远处的宽容度无需太高,所以应该只要对右下角区域进行处理.

2. 对右下角区域进行处理,首先提取处ROI区域,其代码如下

  1. 获取图像的行数和列数
  2. rows, cols = img_binary.shape[:2]
  3. 指定右下角区域的起始和结束位置
  4. x_start, y_start = int(cols * 0.5), int(rows * 0.5)
  5. x_end, y_end = cols, rows
  6. 提取右下角区域
  7. roi = gray[y_start:y_end, x_start:x_end]

然后对其进行均值滤波,并将roi区域幅值到整张图中。最后再次进行二值化操作,此时阈值设置为160。

  1. 选定右小角区域做均值滤波
  2. blur = cv2.blur(roi, (5, 5))
  3. 将滤波后的区域复制回原图像的右下角
  4. img_binary[y_start:y_end, x_start:x_end] = blur
  5. 再次进行二值化操作
  6. _, img_binary = cv2.threshold(img_binary, 170, 255, cv2.THRESH_BINARY)

其结果如下所示。

图10 ROI区域均值滤波与二值化处理结果图

可以发现近处的黑边已被去除,而远方的轮廓线仍清晰可见。

2.3 兴趣区域提取

  • 粗略提取

对上面的区域进行预处理后下一步就是提取兴趣区域,也就是路沿所在的区域,以排除其他区域的影响。从视频中可以看出路沿是在我们右手边的,而在其他行驶条件中,我国的道路一般也都是在右边.因此首先可以截取左向数起2/5区域作为兴趣区域。而再仔细观察可以发现路边与左边2/5处边界线成60度范围,因此可以截取如下的区域作为兴趣区。

图11 兴趣区域示意图

兴趣区域提取的代码如下所示,

  1. def get_roi(img):
  2.     # 获取图像大小
  3.     h, w = img.shape[:2]
  4.     # 计算多边形顶点
  5.     x1 = int(w / 5 * 2)
  6.     x2 = int(w / 5 * 2)
  7.     x3 = int(w / 5 * 2 + h*math.tan(math.pi/3))
  8.     y1 = 50
  9.     y2 = int(h)
  10.     y3 = h
  11.     pts = np.array([(x2, y1), (x3, y2), (x3, y3), (x1, y3), (x1, y2), (x2, y1)])
  12.     mask = np.zeros((rows, cols), dtype=np.uint8)
  13.     # 填充多边形
  14.     cv2.fillPoly(mask, [pts], (255, 255, 255))
  15.     roi = cv2.bitwise_and(img, img, mask=mask)
  16.     return roi
  • 精确提取

在除此提取后发现左右两边的区域或许会产生影响,因此下一步消除左右两边的边界。其思路如下图所示。主要的目的是在整个画面中只留下路沿而其他标志线的边界均去除,其实现方法在于先提取标志线与路基边缘区域,然后将此区域变成兴趣区进行截取,然后将区域外的颜色均变为白色。那么最后结果就只剩下路沿线。

图12 精确提取思路图

在进行均值滤波与二值化后,其结果如下所示。可以看到中间的路沿线已经去除,方便进行边缘提取与霍夫变换。

图13 去除中间路沿线

在得到上面的图像后进行边缘提取,最后使用掩膜进行变换得到下图。

图14 提取后的效果图

可以看到标志线与路基区域已经精确地截取得到。从图中可以看出可以形成三条边沿线,而我们所需要的仅仅是中间的。因此将掩膜区域外的图像变为白色,其结果如下。

图15 保留轮廓线

可以看到效果并不好,因此尝试压缩范围,以最后得到中间的黑线,通过改变截距的大小来进行,其代码如下。

  1. def adjust_line_intercept(point1, point2, c):
  2.     x1, y1 = point1
  3.     x2, y2 = point2
  4.     k = (y2 - y1) / (x2 - x1)
  5.     b = y1 - k * x1
  6.     b += c
  7.     y1_new = k * x1 + b
  8.     y2_new = k * x2 + b
  9.     return [(int(x1), int(y1_new)), (int(x2), int(y2_new))]

然而却发现结果并不佳,因为随着图像的变化,较难找到最佳的截距参数.所以区域限制的方法无太大作用,最后此方法未用到最终结果中。

​​​​​​​2.4 边缘检测

在上面的过程中其实一直有涉及到边缘检测的部分,,的边缘检测我选择了canny边缘检测。它是一种经典的边缘检测算法。通过高斯模糊、计算梯度、非极大值抑制、双阈值检测、边缘连接几个步骤对边缘进行检测。在此次实验中,我参考了高等人[1]的方法设置了高低阈值,即使用光照强度参数 BL的0.4倍作为低阈值,1.2倍作为高阈值。最后还使用cv2.bitwise_and函数来将边缘图像edges和掩码mask进行按位与运算,从而将边缘检测结果限制在指定的区域内。其代码如下。

  1. bl = cv2.mean(img)[0]
  2. canny_low = int(0.4 * bl)
  3. canny_high = int(1.2 * bl)
  4. edges = cv2.Canny(img, canny_low, canny_high)
  5. edges = cv2.bitwise_and(edges, edges, mask=cv2.inRange(frame, (000), (200200200)))

​​​​​​​2.5 Hough变换

霍夫变换是一种经典的图像处理算法,一般它会配合边缘检测以提取出边缘的的坐标信息形成直线或圆。在此处的路沿检测中,路沿一般是直线,所以主要使用线条的hough变换即可。为了得到更好的效果,我进行了多次调整参数。下表为调整threshold的结果统计,默认参数为threshold=100,minLineLength=100, maxLineGap=100。

表1 threshold结果统计

threshold

结果说明

显示效果

150

边界线条较稀疏,路沿线可能无法显示

100

边界线条可以正常显示

50

线条数量多较为稠密

下表为改变minLineLength最短线条长度的结果。

表2 minLineLength结果统计

threshold

结果说明

显示效果

150

边界线条可以正常显示

 

100

边界线条可以正常显示

50

线条变短

改变maxLineGap最大线条间隔的结果,三者的改变对结果影响不大,因此不展示统计表。因此最后参数均选择为100。

​​​​​​​2.6 线条过滤与图像输出

上面的结果中,包含了路沿的边界线,但是同时也含有两侧路基边线与路标线。因此最终输出应该进行过滤,在前面的兴趣区域提取中曾尝试过去除影响但是结果并不佳。同时在hough变换中,会存在某些异常线条,这些线条的斜率往往与路沿的差别很大。于是尝试使用斜率筛选与截距排序来对结果进行过滤。

  • 斜率平均值

统计视频中线条的斜率平均值,将每个视频中线条的斜率累加然后除以线条总数据,以下为各视频线条斜率的统计结果。

表3 各视频路沿斜率统计

视频名称

斜率平均值

01.avi

2.48

02.avi

3.19

03.avi

1.56

三者平均值为 ,在此均值范围内加减其百分之50%作为范围,即1.21~3.62。修改前后如下图所示,可以看到异常的线条给去除了。

图16 斜率限定前

图17 斜率限定后

  • 路沿截距

目前所能看到的图像虽然包含了路沿线,但是也包含了其他的边界线,因此需要过滤。人工统计三个视频中路沿线截距,其结果如下表所示。

表4 各视频路沿截距统计

视频名称

截距范围

01.avi

550-600

02.avi

550-700

03.avi

400-500

因此根据以上的条件进行过滤。以02.avi为例,其变化前后如下图所示,可以看到改变前是很多条线的,而处理后只有路沿存在线。然而这种做法却存在太大的主观性,需要根据特定的视频进行定制无法通用,存在极大的不便性。

图 18截距限定前

图 19截距限定后

3. 路沿检测结果展示

  • 01.avi

图20 01.avi最终结果截图

  • 02.avi

图21 02.avi最终结果截图

  • 03.avi

图22 03.avi最终结果截图

从上面的图中可以看出,其实对于此次实验的路沿检测基本是可以完成的,但是细节上的内容还可以更进一步地完善。比如再进一步自适应兴趣区域,自动识别路沿斜率范围等。

4. 其他路沿检测方法

在查阅文献时,发现了还有很多针对路沿检测的方法,这些方法主要分为两大类。第一类大多出现在10年前,主要是利用hough变换、canny边缘检测等的传统方法来对路沿进行检测;第二类则是使用深度学习的方法对对路沿进行检测。

  • ​​​​​​​传统方法介绍

对于第传统方法,其研究主要集中在10年前,如杨[2]等人提出了一种基于边缘的道路检测算法,采用颜色和方差规则消除非道路边缘的干扰,通过Hough变换确定道路边界的位置,同时通过限定感兴趣区域,进一步提高算法效率。高[1]等人提出了一种基于Canny算子和Hough变换的路缘识别和距离测量算法,能够实时准确地检测不同类型的路缘并进行距离测量。徐[3]等人提出了一种基于直线模型的道路识别算法,采用自然边界作为道路识别的依据,可以应用在有或没有车道线的道路环境中。刘[4]等人提出了一种基于三维道路模型的道路检测和跟踪算法,利用道路标志线的颜色突变来检测道路的边界线,同时利用卡尔曼滤波来进行跟踪分析。Gao[5]等人提出了一种双阈值方法获取道路的二值图像,并采用自适应Hough变换和SUSAN算法来获取道路边界。郭[6]等人采用自适应分离、模糊C均值和模糊规则来进行道路的识别,同时采用Canny算子得到良好的车道线检测效果,应对光照变化的情况。

  • ​​​​​​​深度学习方法介绍

以上传统的这些方法大多都是在深度学习受限于计算机性能无法得到较好发展的年代发表的,这些算法都拥有较好的性能无需太多的计算资源。而如今随着深度学习的火热目前路沿检测也拥有很多的神经网络模型。下面介绍三种关于路沿检测的模型。

1. SCNN

SCNN是一种基于卷积神经网络的语义分割模型,它使用了空洞卷积来增加感受野,以便能够更好地捕捉图像中的长距离信息。为了能够处理不同尺度的图像,SCNN使用了下采样和上采样的操作。其中,下采样用于降低特征图的分辨率,以便能够在更大的感受野范围内进行信息提取。在网络结构上,SCNN采用了一种U-Net结构,在特征提取和语义分割之间添加了一个对称的上采样模块,以便能够恢复原始图像的尺寸。它还使用了交叉熵损失函数来优化网络参数,同时还引入了一些额外的约束条件,如边界损失和平滑损失,以提高模型的鲁棒性和准确性。其效果图如下所示。

 

图23 SCNN效果图 转载于https://github.com/XingangPan/SCNN

2. LaneNet

LaneNet是一种用于车道线检测的深度学习模型,可以实现实时、高精度的车道线检测和分割。LaneNet模型主要由两个部分组成:Encoder网络和Decoder网络。Encoder网络是一个卷积神经网络(CNN),用于提取输入图像的特征。Decoder网络由两个分支组成,一个分支用于车道线二值化分割,另一个分支用于车道线实例分割。LaneNet通过将分割和实例分割任务组合在一起,可以同时检测和分割多条车道线,且可以区分同一车道线上的不同部分。LaneNet的优点在于在不同光照、天气等情况下具有较好的鲁棒性和准确性;能够处理复杂的车道线形状和多车道情况;模型参数相对较小,可以在嵌入式设备上实现实时车道线检测。此模型的结构图如下所示。

 

图24 LaneNet结构图 转载于https://github.com/amusi/awesome-lane-detection

3. VPGNet

vpgnet在2017年的CVF会议上提出的,它使用消失点作为特征值来引导对路沿线与车道线的检测。它将消失点和车道线的位置和宽度作为输入,使用卷积神经网络对图像进行特征提取和车道线检测。其效果图如下:

 

图25 VPGNet效果图 转载于https://github.com/SeokjuLee/VPGNet

vpgnet主要包含三个部分:车道检测分支、路标检测分支和消失点回归分支。在训练过程中,网络同时学习车道和路标的位置和类别信息以及消失点的位置信息,最终通过单次前向传递预测车道和路标的位置和类别,以及消失点的位置。此模型在不良天气条件下进行了有效的实现,其具有高精度和鲁棒性,且实时性较高。

参考文献

[1]高灿, 曾杨, 郑庆华. 基于机器视觉的路缘识别及距离测量方法研究[J]. 建设机械技术与管理, 2014 (10): 125-130.

[2]杨文杰, 胡明昊, 杨静宇. 一种快速的基于边缘的道路检测算法[J]. 计算机科学, 2006, 33(5):257-260.

[3]徐友春, 王荣本, 李克强,等. 一种基于直线模型的道路识别算法研究[J]. 中国图象图形学报:A辑, 2004, 9(7):7.

[4]刘富强, 田敏, 胡振程. 智能汽车中基于视觉的道路检测与跟踪算法[J]. 同济大学学报:自然科学版, 2007, 35(11):7.

[5]Dezhi Gao,Wei Li,Jianmin Duan,etc. A Practical Method of Road Detection for Intelligent Vehicle[C]. In:Proceedings of the IEEE International Conference on Automation and Logistics,Beijing,China,2009:980-985

[6]Jyungguo Wang,Chengjian Lin,Shy i m i ng Chen. Applying Fuzzy Method to Vision-Based Lane Detection and Departure Warning System[J]. Expert Systems with Applications,2010,37:113-126.

[7]郭春钊,山部尚孝,三田诚一. 基于立体视觉平面单应性 的智能车辆可行驶道路边界检测[J]. 自动化学报,2013, 39(4):371-380

[8]Pan, X. SCNN [Source code]. v1.0. Retrieved from https://github.com/XingangPan/SCNN

[9]MaybeShewill-CV. (2018). lanenet-lane-detection [Source code]. GitHub. https://github.com/MaybeShewill-CV/lanenet-lane-detection

[10]Lee, Seokju, et al. "VPGNet: Vanishing Point Guided Network for Lane and Road Marking Detection and Recognition." IEEE Transactions on Image Processing 28.12 (2019): 6034-6046.

[11]https://github.com/amusi/awesome-lane-detection

[12]https://blog.csdn.net/weixin_51426083/article/details/127812799

实验结论或体会

在本次的实验中,我使用了灰度变换、二值化、canny边缘检测以及hough变换等多种方法对视频的每一帧进行了处理,最后成功地对三个视频的路沿线进行了识别。虽然在整个视频中存在某些帧无法正常识别,以及线条偏离,但是大部分的视频帧都能成功识别出路沿线。对于视频的处理以及方法的调用,基本上使用的都是python的opencv库,整个实验下来我对opencv的一些函数与使用方法有了更深入地了解。

在开始实验前,我搜寻了很多关于路沿检测的文献,了解了很多传统的处理方法以及近5年来最新的路沿检测模型。在实验过程中,我并不是完全模仿前人的工作,我还创新性地提出了我自己的想法并得以实现。我认为在此次的实验中的创新点在于多次使用二值化来放大路沿特征与兴趣区域以实现对路沿检测。总而言之,此次的实验是对课上学到的知识地很好一次实践,让我对理论知识拥有更好地了解,受益无穷。


http://www.mrgr.cn/p/34311121

相关文章

Pytorch个人学习记录总结 09

目录 损失函数与反向传播 L1Loss MSELOSS CrossEntropyLoss 损失函数与反向传播 所需的Loss计算函数都在torch.nn的LossFunctions中,官方网址是:torch.nn — PyTorch 2.0 documentation。举例了L1Loss、MSELoss、CrossEntropyLoss。 在这些Loss函数…

植物一区HR | 植物生理组+转录组:揭示豆科植物响应干旱胁迫机制

PlantArray 植物高通量生理学表型监测系统 是一套以植物生理学为基础的高精度,高通量,自动化表型监测系统,集合实验设置、数据分析、决策工具于一身,能够高通量实时动态监测并进行全天候生理及环境参数采集,是进行植物…

canvas实现图片平移,缩放的例子

最近有个水印预览的功能&#xff0c;需要用到canvas 绘制&#xff0c;canvas用的不是很熟&#xff0c;配合chatAI 完成功能。 效果如下 代码如下 原先配置是响应式的&#xff0c;提出来了就不显示操作了&#xff0c;模拟值都写死的 界面给大家参考阅读。 <!DOCTYPE html…

在CSDN学Golang云原生(Kubernetes声明式资源管理Kustomize)

一&#xff0c;生成资源 在 Kubernetes 中&#xff0c;我们可以通过 YAML 或 JSON 文件来定义和创建各种资源对象&#xff0c;例如 Pod、Service、Deployment 等。下面是一个简单的 YAML 文件示例&#xff0c;用于创建一个 Nginx Pod&#xff1a; apiVersion: v1 kind: Pod m…

《怎样顺利通过答辩:论文答辩的策略与技巧》

最近在阅读《怎样顺利通过答辩这本书》&#xff0c;记录一下阅读获取的关键信息和心得。 目录 第一章 答辩是什么 在答辩前你需要做到以下几件事情&#xff0c;核查清单如下&#xff1a; 答辩根据考生及其研究的质量&#xff0c;服务于不同的目的&#xff1a; 通常意义上的…

【软件测试】单元测试工具---Junit详解

1.junit 1.1 junit是什么 JUnit是一个Java语言的单元测试框架。 虽然我们已经学习了selenium测试框架&#xff0c;但是有的时候测试用例很多&#xff0c;我们需要一个测试工具来管理这些测试用例&#xff0c;Junit就是一个很好的管理工具&#xff0c;简单来说Junit是一个针对…

Spring Cloud Gateway - 新一代微服务API网关

Spring Cloud Gateway - 新一代微服务API网关 文章目录 Spring Cloud Gateway - 新一代微服务API网关1.网关介绍2.Spring Cloud Gateway介绍3.Spring Cloud Gateway的特性4.Spring Cloud Gateway的三大核心概念5.Gateway工作流程6.Gateway核心配置7.动态路由8.Predicate自定义P…

uniapp实现预约时间选择弹窗组件

做了个组件&#xff0c;实现出当日预约时间组件&#xff0c;效果图如下 废话不多说&#xff0c;直接上代码&#xff0c;代码简单&#xff0c;参数自己任意改 <template><view class"inventory"><u-popup :show"show" :round"10"…

windows环境安装elasticsearch+kibana并完成JAVA客户端查询

下载elasticsearch和kibana安装包 原文连接&#xff1a;https://juejin.cn/post/7261262567304298554 elasticsearch官网下载比较慢&#xff0c;有时还打不开&#xff0c;可以通过https://elasticsearch.cn/download/下载&#xff0c;先找到对应的版本&#xff0c;最好使用迅…

Docker 入门终极指南[详细]

前言 富 Web 时代&#xff0c;应用变得越来越强大&#xff0c;与此同时也越来越复杂。集群部署、隔离环境、灰度发布以及动态扩容缺一不可&#xff0c;而容器化则成为中间的必要桥梁。 本节我们就来探索一下 Docker 的神秘世界&#xff0c;从零到一掌握 Docker 的基本原理与实…

【Java】零基础上手SpringBoot学习日记(day1)

前言 此帖为本人学习Springboot时的笔记&#xff0c;由于是个接触计算机一年左右的新手&#xff0c;也没有网站开发经验&#xff0c;所以有些地方的理解会比较浅显并且可能会出现错误&#xff0c;望大佬们多多包涵和指正。 Web应用开发 在我的理解中&#xff0c;Web应用的开发…

opencv-28 自适应阈值处理-cv2.adaptiveThreshold()

什么是自适应阈值处理? 对于色彩均衡的图像&#xff0c;直接使用一个阈值就能完成对图像的阈值化处理。但是&#xff0c;有时图像的色彩是不均衡的&#xff0c;此时如果只使用一个阈值&#xff0c;就无法得到清晰有效的阈值分割结果图像。 有一种改进的阈值处理技术&#xff…

基础概念:图片的卷积可视化结果

1. 前言 之前介绍过卷积的基本概念&#xff0c;具体的可以参考图片的卷积和池化操作&#xff0c;这里给出可视化的操作&#xff0c;因为卷积在初学的时候比较抽象&#xff0c;现在有时间就写写看&#xff0c;希望可以给初学的同学一点启发吧(这里前提是学过pytorch和相关的图像…

【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

目录 一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 &#x1f534;静态数据成员&#xff1a; &#x1f534;静态函数成员&#xff1a; ⭕使用静态成员的优点 ⭕使用静态成员的注意事项 三、友…

大数据面试题之Elasticsearch:每日三题(七)

大数据面试题之Elasticsearch:每日三题 1.Elasticsearch索引文档的流程&#xff1f;2.Elasticsearch更新和删除文档的流程&#xff1f;3.Elasticsearch搜索的流程&#xff1f; 1.Elasticsearch索引文档的流程&#xff1f; 协调节点默认使用文档ID参与计算(也支持通过routing)&a…

微服务项目,maven无法加载其他服务依赖

微服务项目&#xff0c;导入了工具类工程&#xff0c;但是一直报错&#xff0c;没有该类&#xff0c; 检查maven 这里的Maven的版本与idea版本不匹配可能是导致依赖加载失败的最重要原因 检查maven配置&#xff0c;我这是原来的maven&#xff0c;home 修改之后,就不报错了

秒级体验本地调试远程 k8s 中的服务

点击上方蓝色字体&#xff0c;选择“设为星标” 回复”云原生“获取基础架构实践 背景 在这个以k8s为云os的时代&#xff0c;程序员在日常的开发过程中&#xff0c;肯定会遇到各种问题&#xff0c;比如&#xff1a;本地开发完&#xff0c;需要部署到远程k8s集群&#xff0c;本地…

TCP/IP协议详解(二)

目录内容 TCP协议的可靠性 TCP的三次握手 TCP的四次挥手 C#中&#xff0c;TCP/IP建立 三次握手和四次挥手常见面试题 在上一篇文章中讲解了TCP/IP的由来以及报文格式&#xff0c;详情请见上一篇文章&#xff0c;现在接着来讲讲TCP/IP的可靠性以及通过代码的实现。 在TCP首部的…

算法通过村第二关-链表白银笔记|指定区间反转

文章目录 前言链表反转|指定区间内头插法&#xff1a;穿针引线法&#xff1a; 总结 前言 提示&#xff1a;人啊&#xff0c;果然跟花一样&#xff0c;开花前的等待无比漫长&#xff0c;绽放的魅力却转瞬即逝。 链表反转|指定区间内 参考题目&#xff1a;92. 反转链表 II - 力…

Vue(待续)

概念 一套用于构建用户界面的渐进式JavaScript框架 Vue可以自底向上逐层的应用&#xff1a; 简单应用:只需一个轻量小巧的核心库。 复杂应用:可以引入各式各样的Vue插件。 1.采用组件化模式&#xff0c;提高代码复用率、且让代码更好维护。 2.声明式编码&#xff0c;让编码人员…