第九篇【传奇开心果系列】Python的OpenCV技术点案例示例:目标跟踪

传奇开心果短博文系列

  • 系列短博文目录
    • Python的OpenCV技术点案例示例系列
  • 短博文目录
    • 前言
    • 二、常用的目标跟踪功能、高级功能和增强跟踪技术介绍
    • 三、常用的目标跟踪功能示例代码
    • 四、OpenCV高级功能示例代码
    • 五、OpenCV跟踪目标增强技术示例代码
    • 六、归纳总结

系列短博文目录

Python的OpenCV技术点案例示例系列

短博文目录

前言

在这里插入图片描述目标跟踪:包括多目标跟踪、运动目标跟踪等功能。OpenCV是一个流行的计算机视觉库,提供了丰富的图像处理和分析功能。在OpenCV中,目标跟踪是一项重要的功能,用于在图像或视频中实时跟踪特定的目标。

二、常用的目标跟踪功能、高级功能和增强跟踪技术介绍

在这里插入图片描述(一)常用的目标跟踪功能介绍

  1. 单目标跟踪(Single Object Tracking):
    单目标跟踪是指在图像或视频中跟踪单个目标的位置和运动。OpenCV提供了多种单目标跟踪算法,如均值迁移(MeanShift)、卡尔曼滤波器(Kalman Filter)和相关滤波器(Correlation Filter)等。这些算法通过分析目标的外观和运动模式来进行跟踪。

  2. 多目标跟踪(Multiple Object Tracking):
    多目标跟踪是指在图像或视频中同时跟踪多个目标的位置和运动。OpenCV中的多目标跟踪算法通常结合目标检测技术,如基于背景建模的方法(如KNN、MOG2)、Haar特征级联分类器等。这些算法能够检测和跟踪多个目标,并给出它们的位置和运动信息。

  3. 运动目标跟踪(Motion Object Tracking):
    运动目标跟踪是指在图像或视频中跟踪移动的目标。OpenCV提供了多种运动目标跟踪算法,如光流法(Optical Flow)、背景差分(Background Subtraction)等。这些算法能够通过分析图像中的像素变化和运动信息来实现目标跟踪。
    (二)高级功能介绍
    除了上述功能之外,OpenCV还支持目标跟踪的一些高级功能,如目标识别、目标形状分析等。这些功能可以帮助用户更好地理解和分析目标的特征和行为。

总而言之,OpenCV提供了丰富的目标跟踪功能,包括单目标跟踪、多目标跟踪和运动目标跟踪等。通过这些功能,开发者可以实现各种实时图像处理和分析应用,如视频监控、自动驾驶等。
(三)跟踪增强技术介绍
当涉及到目标跟踪时,OpenCV还提供了一些其他功能和技术,以进一步增强跟踪的准确性和稳定性:

  1. 目标检测器的整合:
    OpenCV可以与各种目标检测器进行整合,如基于深度学习的物体检测器(如YOLO、SSD、Faster R-CNN等)。通过将目标检测器与跟踪算法结合使用,可以实现更准确和鲁棒的多目标跟踪。

  2. 特征提取和描述符匹配:
    OpenCV提供了多种特征提取和描述符匹配算法,如SIFT、SURF、ORB等。这些算法可以用于提取目标的特征并进行特征匹配,从而在跟踪过程中提供更多的几何和外观信息。

  3. 深度学习模型的应用:
    OpenCV支持使用深度学习模型进行目标跟踪。通过将训练好的深度学习模型加载到OpenCV中,可以实现更精确和高效的目标跟踪,尤其是对于复杂的场景和目标。

  4. 跟踪器的评估和选择:
    OpenCV提供了一系列用于评估和选择跟踪器的工具和指标。通过使用这些工具,可以对不同的跟踪器进行性能比较和选择,以找到最适合特定任务的跟踪算法。

总结来说,OpenCV在目标跟踪领域提供了丰富的功能和技术。开发者可以根据具体需求选择适合的算法和工具,实现准确、稳定和高效的目标跟踪应用。

三、常用的目标跟踪功能示例代码

在这里插入图片描述

  1. OpenCV单目标跟踪示例代码
    以下是一个使用OpenCV进行单目标跟踪的示例代码:
import cv2# 创建跟踪器
tracker = cv2.TrackerCSRT_create()# 加载视频或图像
video = cv2.VideoCapture('path_to_video.mp4')# 读取第一帧
ret, frame = video.read()# 选择要跟踪的初始目标区域
bbox = cv2.selectROI("Frame", frame, fromCenter=False, showCrosshair=True)# 初始化跟踪器
tracker.init(frame, bbox)# 循环处理视频帧
while True:# 读取当前帧ret, frame = video.read()# 结束条件:视频结束或者按下'q'键退出if not ret or cv2.waitKey(1) == ord('q'):break# 更新跟踪器并获取目标位置success, bbox = tracker.update(frame)# 如果跟踪成功,绘制跟踪框if success:x, y, w, h = [int(v) for v in bbox]cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示当前帧cv2.imshow("Frame", frame)# 释放资源
video.release()
cv2.destroyAllWindows()

以上代码使用了OpenCV中的CSRT跟踪器(可以根据需要选择其他跟踪器),通过选择初始目标区域,初始化跟踪器,并在循环中不断更新跟踪器来实现目标跟踪。在每一帧中,如果跟踪成功,会绘制一个矩形框来标识目标位置。

请确保已经安装了OpenCV库,并将视频文件的路径替换为您要跟踪的视频文件路径。

  1. OpenCV多目标跟踪示例代码
    以下是一个使用OpenCV进行多目标跟踪的示例代码:
import cv2# 加载视频或图像
video = cv2.VideoCapture('path_to_video.mp4')# 创建多目标跟踪器
tracker = cv2.MultiTracker_create()# 循环处理视频帧
while True:# 读取当前帧ret, frame = video.read()# 结束条件:视频结束或者按下'q'键退出if not ret or cv2.waitKey(1) == ord('q'):break# 多目标跟踪success, boxes = tracker.update(frame)# 遍历每个跟踪的目标for box in boxes:x, y, w, h = [int(v) for v in box]cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示当前帧cv2.imshow("Frame", frame)# 如果需要添加新的目标,可以按下's'键并用鼠标选择新的目标区域if cv2.waitKey(1) == ord('s'):bbox = cv2.selectROI("Frame", frame, fromCenter=False, showCrosshair=True)tracker.add(cv2.TrackerCSRT_create(), frame, bbox)# 释放资源
video.release()
cv2.destroyAllWindows()

以上代码使用了OpenCV中的MultiTracker类来实现多目标跟踪。在循环中,读取视频帧并通过tracker.update()方法更新多个目标的位置。然后,遍历每个目标的位置,并在帧上绘制矩形框来标识目标。

在代码中,如果需要添加新的目标,可以按下’s’键,并使用鼠标选择新的目标区域,然后将其添加到跟踪器中。

  1. OpenCV运动目标跟踪示例代码
    以下是一个使用OpenCV进行运动目标跟踪的示例代码:
import cv2# 创建背景减除器
bg_subtractor = cv2.createBackgroundSubtractorMOG2()# 加载视频或图像
video = cv2.VideoCapture('path_to_video.mp4')# 循环处理视频帧
while True:# 读取当前帧ret, frame = video.read()# 结束条件:视频结束或者按下'q'键退出if not ret or cv2.waitKey(1) == ord('q'):break# 背景减除,提取前景fg_mask = bg_subtractor.apply(frame)# 对前景进行形态学操作,去除噪点kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))fg_mask = cv2.morphologyEx(fg_mask, cv2.MORPH_OPEN, kernel)# 寻找前景中的轮廓contours, _ = cv2.findContours(fg_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 遍历每个轮廓for contour in contours:# 计算轮廓的边界框x, y, w, h = cv2.boundingRect(contour)# 根据面积大小过滤掉小目标if cv2.contourArea(contour) > 100:# 在帧上绘制矩形框来标识目标cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示当前帧cv2.imshow("Frame", frame)# 释放资源
video.release()
cv2.destroyAllWindows()

以上代码使用了OpenCV中的背景减除器(MOG2)来提取视频帧中的前景。首先,通过createBackgroundSubtractorMOG2()方法创建背景减除器。然后,循环读取视频帧,并对每一帧应用背景减除器来提取前景。接下来,使用形态学操作(开运算)去除前景中的噪点。最后,通过寻找前景中的轮廓,过滤掉面积较小的目标,并在帧上绘制矩形框来标识目标位置。

四、OpenCV高级功能示例代码

在这里插入图片描述1. OpenCV目标识别示例代码
以下是一个使用OpenCV进行目标识别的示例代码:

import cv2# 加载目标检测器
net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "model.caffemodel")# 加载图像
image = cv2.imread("image.jpg")# 获取图像的高度和宽度
(h, w) = image.shape[:2]# 根据预训练模型进行目标识别
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 0.007843, (300, 300), 127.5)
net.setInput(blob)
detections = net.forward()# 遍历检测结果
for i in range(0, detections.shape[2]):confidence = detections[0, 0, i, 2]# 设置置信度阈值if confidence > 0.5:# 提取目标位置box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])(startX, startY, endX, endY) = box.astype("int")# 在图像上绘制矩形框和置信度cv2.rectangle(image, (startX, startY), (endX, endY), (0, 255, 0), 2)text = "{:.2f}%".format(confidence * 100)y = startY - 10 if startY - 10 > 10 else startY + 10cv2.putText(image, text, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)# 显示结果图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码使用了OpenCV的深度学习模块,通过预训练的Caffe模型进行目标识别。首先,通过cv2.dnn.readNetFromCaffe()方法加载目标检测器的配置文件和模型文件。然后,读取图像并获取图像的尺寸。接下来,将图像转换为输入blob,并将其输入到网络中,通过前向传播获取目标检测结果。最后,根据置信度阈值过滤检测结果,并在图像上绘制矩形框和置信度。

  1. OpenCV目标形状分析示例代码
    以下是一个使用OpenCV进行目标形状分析的示例代码:
import cv2
import numpy as np# 加载图像并转为灰度图像
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 进行二值化处理
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 遍历每个轮廓
for contour in contours:# 计算轮廓的周长和面积perimeter = cv2.arcLength(contour, True)area = cv2.contourArea(contour)# 进行多边形逼近epsilon = 0.04 * perimeterapprox = cv2.approxPolyDP(contour, epsilon, True)# 绘制轮廓和相关信息cv2.drawContours(image, [approx], 0, (0, 255, 0), 2)cv2.putText(image, f"Area: {area}", (approx[0][0][0], approx[0][0][1] - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)cv2.putText(image, f"Perimeter: {perimeter}", (approx[0][0][0], approx[0][0][1] + 20),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)# 显示结果图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码使用了OpenCV的轮廓查找和多边形逼近功能来进行目标形状分析。首先,加载图像并将其转换为灰度图像。然后,对灰度图像进行二值化处理,得到二值图像。接下来,使用cv2.findContours()函数查找二值图像中的轮廓。然后,对每个轮廓进行多边形逼近,通过调整逼近的精度来控制多边形的边数。最后,绘制轮廓和相关信息(面积和周长)。

五、OpenCV跟踪目标增强技术示例代码

在这里插入图片描述

  1. 目标检测器的整合示例代码
    以下是一个使用OpenCV进行目标检测的整合示例代码:
import cv2# 加载目标检测器
net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "model.caffemodel")# 加载图像
image = cv2.imread("image.jpg")# 获取图像的高度和宽度
(h, w) = image.shape[:2]# 根据预训练模型进行目标检测
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 0.007843, (300, 300), 127.5)
net.setInput(blob)
detections = net.forward()# 遍历检测结果
for i in range(0, detections.shape[2]):confidence = detections[0, 0, i, 2]# 设置置信度阈值if confidence > 0.5:# 提取目标位置box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])(startX, startY, endX, endY) = box.astype("int")# 在图像上绘制矩形框和置信度cv2.rectangle(image, (startX, startY), (endX, endY), (0, 255, 0), 2)text = "{:.2f}%".format(confidence * 100)y = startY - 10 if startY - 10 > 10 else startY + 10cv2.putText(image, text, (startX, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)# 显示结果图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码整合了目标检测和目标识别的功能。首先,通过cv2.dnn.readNetFromCaffe()方法加载目标检测器的配置文件和模型文件。然后,读取图像并获取图像的尺寸。接下来,将图像转换为输入blob,并将其输入到网络中,通过前向传播获取目标检测结果。最后,根据置信度阈值过滤检测结果,并在图像上绘制矩形框和置信度。

  1. 特征提取和描述符匹配示例代码
    以下是一个使用OpenCV进行特征提取和描述符匹配的示例代码:
import cv2# 加载图像
image1 = cv2.imread("image1.jpg")
image2 = cv2.imread("image2.jpg")# 创建SIFT特征提取器
sift = cv2.xfeatures2d.SIFT_create()# 检测关键点和计算描述符
keypoints1, descriptors1 = sift.detectAndCompute(image1, None)
keypoints2, descriptors2 = sift.detectAndCompute(image2, None)# 创建FLANN匹配器
flann = cv2.FlannBasedMatcher()# 使用knnMatch进行特征匹配
matches = flann.knnMatch(descriptors1, descriptors2, k=2)# 进行比值测试,筛选出优秀的匹配结果
good_matches = []
for m, n in matches:if m.distance < 0.75 * n.distance:good_matches.append(m)# 绘制匹配结果
matched_image = cv2.drawMatches(image1, keypoints1, image2, keypoints2, good_matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)# 显示匹配结果
cv2.imshow("Matched Image", matched_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码使用了OpenCV的SIFT特征提取器和FLANN匹配器来进行特征提取和描述符匹配。首先,加载图像。然后,创建SIFT特征提取器。接下来,使用detectAndCompute()方法检测关键点并计算描述符。然后,创建FLANN匹配器。使用knnMatch()方法进行特征匹配,并通过比值测试筛选出优秀的匹配结果。最后,通过drawMatches()方法绘制匹配结果图像。

  1. 深度学习模型的应用示例代码
    以下是一个使用深度学习模型进行图像分类的示例代码:
import cv2
import numpy as np# 加载图像
image = cv2.imread("image.jpg")# 预处理图像
preprocessed_image = cv2.resize(image, (224, 224))
preprocessed_image = preprocessed_image.astype("float32")
preprocessed_image /= 255.0
preprocessed_image = np.expand_dims(preprocessed_image, axis=0)# 加载预训练的模型
model = load_model("model.h5")# 进行图像分类
predictions = model.predict(preprocessed_image)
label = np.argmax(predictions)# 加载标签文件
with open("labels.txt", "r") as f:labels = f.read().splitlines()# 输出分类结果
print("Predicted label:", labels[label])# 显示图像
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码使用了深度学习模型进行图像分类。首先,加载图像。然后,对图像进行预处理,包括调整大小、归一化和添加批次维度。接下来,加载预训练的深度学习模型。然后,使用模型对预处理后的图像进行分类,并获取最高概率的类别标签。最后,根据标签文件将分类结果输出,并显示原始图像。

请确保已经安装了相关的深度学习框架(如Keras、TensorFlow等),并将模型文件路径和标签文件路径替换为您自己的文件路径。

  1. 跟踪器的评估和选择示例代码
    以下是一个使用OpenCV进行跟踪设备评估和选择的示例代码:
import cv2# 初始化跟踪器
tracker_types = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'CSRT', 'MOSSE']
tracker_type = tracker_types[2]  # 选择跟踪器类型,这里以KCF为例if tracker_type == 'BOOSTING':tracker = cv2.TrackerBoosting_create()
elif tracker_type == 'MIL':tracker = cv2.TrackerMIL_create()
elif tracker_type == 'KCF':tracker = cv2.TrackerKCF_create()
elif tracker_type == 'TLD':tracker = cv2.TrackerTLD_create()
elif tracker_type == 'MEDIANFLOW':tracker = cv2.TrackerMedianFlow_create()
elif tracker_type == 'GOTURN':tracker = cv2.TrackerGOTURN_create()
elif tracker_type == 'CSRT':tracker = cv2.TrackerCSRT_create()
elif tracker_type == 'MOSSE':tracker = cv2.TrackerMOSSE_create()# 加载视频或摄像头
video_path = "video.mp4"
cap = cv2.VideoCapture(video_path)# 读取第一帧并选择ROI(兴趣区域)
ret, frame = cap.read()
bbox = cv2.selectROI("Select ROI", frame, fromCenter=False, showCrosshair=True)
cv2.destroyAllWindows()# 初始化跟踪器并开始跟踪
tracker.init(frame, bbox)# 循环处理视频帧
while True:ret, frame = cap.read()if not ret:break# 跟踪目标并获取边界框success, bbox = tracker.update(frame)# 绘制边界框if success:(x, y, w, h) = [int(v) for v in bbox]cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)else:cv2.putText(frame, "Tracking failure detected", (100, 80),cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)# 显示当前帧cv2.imshow("Frame", frame)# 按下ESC键退出if cv2.waitKey(1) == 27:break# 释放资源
cap.release()
cv2.destroyAllWindows()

以上代码演示了如何使用OpenCV的跟踪器来评估和选择适合的跟踪设备。首先,根据需求选择跟踪器类型。然后,加载视频或摄像头,并选择兴趣区域(ROI)作为初始跟踪目标。接下来,初始化跟踪器并开始跟踪。在循环处理视频帧的过程中,不断更新跟踪目标的位置,并在每一帧上绘制边界框以显示跟踪结果。最后,按下ESC键退出程序。

六、归纳总结

在这里插入图片描述OpenCV提供了多种目标跟踪技术,用于在视频或图像序列中实时跟踪目标的位置。以下是OpenCV中常用的目标跟踪技术的归纳总结:

  1. BOOSTING:基于AdaBoost算法的目标跟踪器,适用于静态场景低速运动目标。

  2. MIL:MIL(Multiple Instance Learning)目标跟踪器,通过多实例学习来进行目标跟踪,适用于复杂背景和部分遮挡的场景。

  3. KCF:KCF(Kernelized Correlation Filters)目标跟踪器,使用核相关滤波器进行目标跟踪,在速度和准确性之间取得了平衡。

  4. TLD:TLD(Tracking-Learning-Detection)目标跟踪器,结合了目标跟踪、目标学习和目标检测的方法,适用于长时间跟踪和目标丢失后重新识别。

  5. MEDIANFLOW:基于光流和中值流的目标跟踪器,适用于目标尺寸变化较大和光照变化较大的场景。

  6. GOTURN:GOTURN(Generic Object Tracking Using Regression Networks)目标跟踪器,基于深度学习的回归网络,适用于快速运动的目标跟踪。

  7. CSRT:CSRT(Channel and Spatial Reliability)目标跟踪器,结合了颜色特征和空间特征的可靠性估计,适用于复杂背景和部分遮挡的场景。

  8. MOSSE:MOSSE(Minimum Output Sum of Squared Error)目标跟踪器,使用最小输出平方误差进行目标跟踪,具有快速的实时性能。
    在这里插入图片描述

这些目标跟踪技术在不同的场景和要求下具有各自的优势和适用性。根据目标的运动速度、背景复杂度、遮挡情况等因素,可以选择合适的跟踪器来实现准确和稳定的目标跟踪。

希望以上总结对您有帮助!如果还有其他问题,请随时提问。

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

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

相关文章

maven--将jar包上传到maven中央仓库(公库)

原文网址&#xff1a;maven--将jar包上传到maven中央仓库(公库)-CSDN博客 简介 本文介绍怎样将jar包上传到maven中央仓库(公库)。 当自己有一些公共组件时&#xff0c;上传到maven公库是最好的&#xff0c;这样项目里直接引用即可&#xff0c;不需要在多处修改&#xff0c;而…

【Linux】基本指令(上)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 Xshell快捷键 Linux基本指令 ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令/rm指令 结语 Xshell快捷键 AltEnter 全屏/取消全屏 Tab 进…

-1- Python环境安装

1、Python安装 1.1、Windows安装Python 进入python官网&#xff1a;Welcome to Python.org点击 download——>all releases&#xff1b;建议选择3.7.2版本&#xff08;网页链接&#xff1a;Python Release Python 3.7.2 | Python.org&#xff09;&#xff1b;下拉&#xf…

理想架构的高回退Doherty功率放大器理论与ADS仿真-Multistage

理想架构的高回退Doherty功率放大器理论与仿真-Multistage 参考&#xff1a; 三路Doherty设计 01 射频基础知识–基础概念 Switchmode RF and Microwave Power Amplifiers、 理想架构的Doherty功率放大器&#xff08;等分经典款&#xff09;的理论与ADS电流源仿真参考&#x…

go语言socket编程

1.互联网分层模型 过程分析&#xff1a; 2.Socket图解 Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中&#xff0c;Socket其实就是一个门面模式&#xff0c;它把复杂的TCP/IP协议族隐藏在Socket后面&#xff0c;对用户来说只需要调用Socket规定的相关函数&a…

备战蓝桥杯---数据结构与STL应用(优先队列的小细节)

很显然&#xff0c;我们先二分求X,对于验证&#xff0c;一开始我先想的是直接求每个的不足电量再除充电量后向上取整&#xff0c;然后判断与k的大小关系。事实上&#xff0c;如果让k很大&#xff0c;若有两只手机在下一刻多没电&#xff0c;显然上述方法得出的结论是错误的&…

氢气泄漏检测仪使用方法:守护安全,从细节开始

随着科技的发展&#xff0c;我们的生活和工作环境中充满了各种潜在的危险。其中&#xff0c;氢气作为一种清洁能源&#xff0c;其使用日益广泛&#xff0c;但同时也带来了泄漏的风险。为了确保我们的安全&#xff0c;了解并正确使用氢气泄漏检测仪至关重要。下面将详细介绍氢气…

机器学习:梯度下降法(Python)

LinearRegression_GD.py import numpy as np import matplotlib.pyplot as pltclass LinearRegression_GradDesc:"""线性回归&#xff0c;梯度下降法求解模型系数1、数据的预处理&#xff1a;是否训练偏置项fit_intercept&#xff08;默认True&#xff09;&…

了解 Redis Channel:消息传递机制、发布与订阅,以及打造简易聊天室的实战应用。

文章目录 1. Redis Channel 是什么2. Redis-Cli 中演示使用3. 利用 Channel 打造一个简易的聊天室参考文献 1. Redis Channel 是什么 Redis Channel 是一种消息传递机制&#xff0c;允许发布者向特定频道发布消息&#xff0c;而订阅者则通过订阅频道实时接收消息。 Redis Cha…

BioTech - 小分子药物生成与从头设计 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135930139 小分子药物生成是一种利用计算方法自动探索化学空间&#xff0c;寻找具有理想生物活性和药物特性的分子结构的过程。从头设计是一种特殊…

【日常总结】windows11 设置文件默认打开方式

一、场景 二、实战 Stage 1&#xff1a;打开设置 Stage 2&#xff1a;应用 > 默认应用 > 搜索 .txt Stage 3&#xff1a;修改成notepad &#xff0c;设置默认值即可 一、场景 windows 11 .txt 默认记事本打开 需求&#xff1a;如何使用notepad打开呢 &#xff1f;…

隧道穿越:隧道穿透技术介绍

后面会进行一些隧道穿越的实验&#xff0c;因此在本篇中这里先介绍一些有关隧道穿越的技术知识点 隧道和隧道穿透 隧道是一种通过互联网基础设施在网络之间传递数据的方式&#xff0c;设计从数据封装、传输到解包的全过程&#xff0c;使用隧道传递的数据&#xff08;或者负载…

abap_bool 类型

abap_bool 类型 abap_bool 有两种abap_true和abap_false&#xff0c;abap_true代表x&#xff0c;abap_false是空

【Emgu CV教程】6.7、图像平滑之MedianBlur()中值滤波

文章目录 一、介绍1.原理2.函数介绍 二、举例1.原始素材2.代码3.运行结果 一、介绍 1.原理 图像的滤波分为线性滤波和非线性滤波,常见的线性滤波就是前面介绍的均值滤波、方框滤波、高斯滤波。常见的非线性滤波主要包括中值滤波、双边滤波&#xff0c;今天就先介绍中值滤波。…

二进制安全虚拟机Protostar靶场(5)堆的简单介绍以及实战 heap0

前言 这是一个系列文章&#xff0c;之前已经介绍过一些二进制安全的基础知识&#xff0c;这里就不过多重复提及&#xff0c;不熟悉的同学可以去看看我之前写的文章 什么是堆 堆是动态内存分配的区域&#xff0c;程序在运行时用来分配内存。它与栈不同&#xff0c;栈用于静态…

asdf安装不同版本的nodejs和yarn和pnpm

安装asdf 安装nodejs nodejs版本 目前项目中常用的是14、16和18 安装插件 asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git asdf plugin-add yarn https://github.com/twuni/asdf-yarn.git可以查看获取所有的nodejs版本 asdf list all nodejs有很多找…

【TCP】三次握手(建立连接)

前言 在网络通信的世界里&#xff0c;可靠传输协议&#xff08;TCP&#xff09;扮演着重要的角色&#xff0c;它保证了数据包能够按顺序、完整地从发送端传送到接收端。TCP协议中有一个至关重要的机制——三次握手。这一过程确保了两个TCP设备在开始数据传输之前建立起一个稳定…

机器的大小端存储模式

大、小端字节序 一个整形数据在内存中的存储方式是该数据的补码&#xff1b; 该数据本事的数据是从高地址位到低地址位的&#xff0c;而计算机的内存中刚好相反&#xff01; 以数字10为例&#xff1a; 补码&#xff1a;0000 0000 0000 0000 0000 0000 0000 1010 补码的十六进制…

Redis简单阐述、安装配置及远程访问

目录 一、Redis简介 1.什么是Redis 2.特点 3.优势 4.数据库对比 5.应用场景 二、 安装与配置 1.下载 2.上传解压 3.安装gcc 4.编译 5.查看安装目录 6.后端启动 7.测试 8.系统服务配置 三、Redis远程访问 1.修改访问IP地址 2.设置登录密码 3.重启Redis服务 …