当前位置: 首页 > news >正文

23.OpenCV轮廓逼近与拟合

OpenCV轮廓逼近与拟合

在计算机视觉中,轮廓是图像中边界或形状的重要表达形式。然而,直接从图像中提取的轮廓常常包含大量冗余点,且噪声较多。为了更好地描述图像中的形状,我们通常需要对轮廓进行逼近和拟合,从而降低数据维度、获得光滑的形状描述,并便于后续分析处理。本文将介绍轮廓逼近与拟合的基本原理,在 OpenCV 中如何使用相关函数(如 approxPolyDPfitLineboundingRectminEnclosingCirclefitEllipse 等)实现这些操作,并通过代码示例展示实际应用。

1. 轮廓逼近

1.1 基本原理

轮廓逼近的主要目的是用较少的点描述原始轮廓,大大降低数据量的同时,保留原始轮廓的主要形状特征。常用的方法为Douglas-Peucker 算法,通过设定容差(ε)来控制逼近精度。简单来说,算法会剔除那些不会显著改变轮廓形状的冗余点,从而生成一个更简洁的多边形。

1.2 approxPolyDP API

在 OpenCV 中,approxPolyDP 函数实现了 Douglas-Peucker 算法,其函数原型如下:

void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed);
  • curve:输入轮廓点集。
  • approxCurve:输出逼近后的轮廓点集。
  • epsilon:最大距离误差,通常设置为轮廓周长的一定比例(如 1% 或 2%)。
  • closed:指示轮廓是否是闭合曲线。

1.3 参考代码

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{Mat src = imread("E:/image/pic3.png");if (src.empty()){cout << "无法加载图像!" << endl;return -1;}Mat gray, binary;cvtColor(src, gray, COLOR_BGR2GRAY);threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(binary, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);// 创建一幅画布用于显示结果Mat approxImage = src.clone();// 依次对每个轮廓进行逼近for (size_t i = 0; i < contours.size(); i++){// epsilon 定义逼近精度,通常取轮廓弧长的一定比例double epsilon = 0.01 * arcLength(contours[i], true);vector<Point> approxCurve;approxPolyDP(contours[i], approxCurve, epsilon, true);// 绘制逼近后的多边形,颜色为红色polylines(approxImage, approxCurve, true, Scalar(0, 0, 255), 2);}imshow("逼近轮廓", approxImage);waitKey(0);return 0;
}

说明

  • arcLength 计算轮廓的周长,然后用一定比例作为逼近精度 epsilon
  • approxPolyDP 根据指定精度将轮廓逼近为更简单的多边形。
  • 最后用 polylines 绘制逼近后的多边形轮廓。

在这里插入图片描述

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>using namespace cv;
using namespace std;int main()
{// 1. 读取输入图像,并转换为灰度图Mat inputImg = imread("E:/image/pic4.png");if (inputImg.empty()) {cerr << "图像加载失败!" << endl;return -1;}Mat grayInput;cvtColor(inputImg, grayInput, COLOR_BGR2GRAY);// 2. 对图像应用阈值处理得到二值图像Mat binaryInput;threshold(grayInput, binaryInput, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);vector<vector<Point>> contoursInput, contoursTemplate;vector<Vec4i> hierarchy;findContours(binaryInput, contoursInput, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);// 5. 遍历输入图像中的所有轮廓,计算与模板轮廓的匹配度for (size_t i = 0; i < contoursInput.size(); i++) {//多边形逼近Mat ret;approxPolyDP(contoursInput[i], ret, 3, true);double area = contourArea(contoursInput[i]);double l = arcLength(contoursInput[i], true);printf("corner %d  ,area %.2f,  length %.2f\n", ret.rows , area,l);Moments m = moments(contoursInput[i]);//drawContours(inputImg, contoursInput, static_cast<int>(i), Scalar(0, 255, 0), 2);int cx = static_cast<int>(m.m10 / m.m00);int cy = static_cast<int>(m.m01 / m.m00);circle(inputImg, Point(cx, cy), 5, Scalar(0, 0, 255), -1);if (ret.rows==6){putText(inputImg, "poly", Point(cx+10, cy), FONT_HERSHEY_PLAIN, 1, Scalar(0, 255, 0), 1);}else if (ret.rows == 5){putText(inputImg, "pentagon", Point(cx + 10, cy), FONT_HERSHEY_PLAIN, 1, Scalar(0, 255, 0), 1);}else if (ret.rows == 4){putText(inputImg, "rectangle", Point(cx + 10, cy), FONT_HERSHEY_PLAIN, 1, Scalar(0, 255, 0), 1);}else if (ret.rows == 3){putText(inputImg, "triangle", Point(cx + 10, cy), FONT_HERSHEY_PLAIN, 1, Scalar(0, 255, 0), 1);}else if (ret.rows > 10){putText(inputImg, "circle", Point(cx + 10, cy), FONT_HERSHEY_PLAIN, 1, Scalar(0, 255, 0), 1);}}//6. 显示结果\n   cv::imshow("轮廓逼近", ~inputImg);cv::waitKey(0);return 0;
}

通过判断逼近结果点的个数判断多边形的类型

在这里插入图片描述

2. 轮廓拟合

在某些应用中,我们不仅需要简化轮廓,还需要拟合出轮廓对应的几何形状(例如最小外接矩形、椭圆拟合、直线拟合等)。OpenCV 提供了多个拟合函数,下面分别介绍常用的几种。

2.1 拟合最小外接矩形

minAreaRect 可用于求解轮廓的最小外接矩形,其结果可以带旋转角度。示例代码如下:

// 针对当前轮廓拟合最小外接矩形
RotatedRect minRect = minAreaRect(contours[i]);// 通过 boxPoints 得到矩形的四个顶点
Point2f rectPoints[4];
minRect.points(rectPoints);
for (int j = 0; j < 4; j++)
{line(approxImage, rectPoints[j], rectPoints[(j+1)%4], Scalar(255, 0, 0), 2);
}

说明

  • 返回的 RotatedRect 包含中心点、尺寸和旋转角度。
  • boxPoints 函数可以提取矩形的四个顶点,便于绘制.

2.2 拟合椭圆

对曲线较为平滑的轮廓,可以拟合椭圆。注意:输入点数量需大于 5。示例代码如下:

if (contours[i].size() > 5)
{RotatedRect ellipseRect = fitEllipse(contours[i]);ellipse(approxImage, ellipseRect, Scalar(0, 255, 255), 2);
}

说明

  • fitEllipse 返回一个 RotatedRect 对象,描述拟合出来的椭圆。
  • ellipse 函数绘制拟合好的椭圆,颜色可以自行设置。

2.3 拟合直线

有时希望从轮廓点中提取直线信息,这时可以使用 fitLine。示例代码如下:

Vec4f lineParams;
fitLine(contours[i], lineParams, DIST_L2, 0, 0.01, 0.01);
// lineParams 格式为 (vx, vy, x0, y0),其中 (vx,vy) 为方向向量,(x0,y0) 为直线上一个点// 根据方向向量确定直线的两个端点便于绘制
int imgWidth = src.cols, imgHeight = src.rows;
Point point0(lineParams[2], lineParams[3]);
Point point1;
point1.x = point0.x + (int)(lineParams[0] * imgWidth);
point1.y = point0.y + (int)(lineParams[1] * imgHeight);line(approxImage, point0, point1, Scalar(255, 255, 0), 2);

说明

  • fitLine 返回直线参数,其中 (vx, vy) 表示直线方向, (x0, y0) 表示直线上一个点。
  • 根据图像尺寸和方向向量,可以构造直线的端点用于绘制。

2.4 综合示例

#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main()
{// 读取图像Mat src = imread("E:/image/pic2.png");if (src.empty()){cout << "无法加载图像!" << endl;return -1;}// 预处理:灰度与二值化Mat gray, binary;cvtColor(src, gray, COLOR_BGR2GRAY);threshold(gray, binary, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);// 提取轮廓vector<vector<Point>> contours;vector<Vec4i> hierarchy;findContours(binary, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);// 用于结果展示Mat result = src.clone();for (size_t i = 0; i < contours.size(); i++){// 绘制原始轮廓(绿色)drawContours(result, contours, i, Scalar(0, 255, 0), 2);// 进行轮廓逼近double epsilon = 0.01 * arcLength(contours[i], true);vector<Point> approxCurve;approxPolyDP(contours[i], approxCurve, epsilon, true);polylines(result, approxCurve, true, Scalar(0, 0, 255), 2);double area = contourArea(contours[i]);double l = arcLength(contours[i], true);printf("corner %d  ,area %.2f,  length %.2f\n", approxCurve.size(), area, l);// 拟合最小外接矩形(蓝色)RotatedRect minRect = minAreaRect(contours[i]);Point2f rectPoints[4];minRect.points(rectPoints);for (int j = 0; j < 4; j++){line(result, rectPoints[j], rectPoints[(j + 1) % 4], Scalar(255, 0, 0), 2);}// 拟合椭圆(黄色),要求轮廓至少有 5 个点if (contours[i].size() > 5){RotatedRect ellipseRect = fitEllipse(contours[i]);ellipse(result, ellipseRect, Scalar(0, 255, 255), 2);}}imshow("轮廓逼近与拟合", result);waitKey(0);return 0;
}

在这里插入图片描述

3. 总结

本文介绍了如何在 OpenCV C++ 中进行轮廓检测、逼近和拟合。

  • 轮廓检测: 使用 findContours 提取图像中的轮廓;
  • 轮廓逼近: 通过 approxPolyDP 对复杂边缘进行简化;
  • 拟合: 利用 minAreaRectfitEllipsefitLine 分别求解最小外接矩形、椭圆和直线。

掌握上述方法后,你可以在各种图像分析与计算机视觉项目中更高效地处理和分析目标边界信息。

相关文章:

23.OpenCV轮廓逼近与拟合

OpenCV轮廓逼近与拟合 在计算机视觉中&#xff0c;轮廓是图像中边界或形状的重要表达形式。然而&#xff0c;直接从图像中提取的轮廓常常包含大量冗余点&#xff0c;且噪声较多。为了更好地描述图像中的形状&#xff0c;我们通常需要对轮廓进行逼近和拟合&#xff0c;从而降低…...

Flutter Row / Column 组件详解

1. 引言 在 Flutter 中&#xff0c;Row 和 Column 是最常用的布局组件&#xff0c;用于在水平方向 (Row) 或垂直方向 (Column) 排列子组件。它们提供了强大的对齐方式、空间分配策略&#xff0c;适用于各种 UI 设计需求。本文将详细介绍它们的基本用法、主要属性及自定义样式。…...

WHAT - 表单场景 - 依赖联动

目录 示例场景技术栈示例代码功能点总结详情场景 - 依赖联动初始化示例说明&#xff1a;详情页场景&#xff08;含回显、联动&#xff09;修改点说明示例代码&#xff08;详情页&#xff09;总结一下关键点 下面是一个基于 React TypeScript Ant Design (antd) 的表单联动示例…...

SecProxy - 自动化安全协同平台

本人为甲方安全人员&#xff0c;从事甲方工作近6年&#xff1b;针对在甲方平时安全工作的一些重复、复杂、难点的工作&#xff0c;思考如何通过AI、脚本、或者工具实现智能且自动化&#xff0c;于是花平时空闲时间准备将这些能力全部集中到一个平台&#xff0c;于是有了这个东西…...

网络3 子网掩码 划分ip地址

1.根据子网掩码判断主机数 IP地址网络位主机位 核心&#xff1a;将主机位划分为子网位和主机位 疑问&#xff1a;子网位有什么作用 子网掩码&#xff1a;网络位全为1&#xff0c;主机位全为0 主机数2^主机位 -2 2.根据主机和子网判断子网掩码 有一个B类网络145.38.0.0需要划…...

电容详解:定义、作用、分类与使用要点

一、电容的基本定义 电容&#xff08;Capacitor&#xff09; 是由两个导体极板&#xff08;正负极&#xff09;和中间绝缘介质组成的储能元件&#xff0c;其基本特性为存储电荷。 公式&#xff1a; C Q / V C&#xff1a;电容值&#xff08;单位&#xff1a;法拉F&#xff09…...

Sublime Text for Mac v4.0 【注册汉化版】代码编辑器

Sublime Text for Mac v4.0 【注册汉化版】代码编辑器 一、介绍 sublime text for Mac一款轻量级的文本编辑器&#xff0c;拥有丰富的功能和插件。它支持多种编程语言&#xff0c;包括C、Java、Python、Ruby等&#xff0c;可以帮助程序员快速编写代码。Sublime Text的界面简洁…...

OpenCV 进阶实战与技巧——图像处理的全面解析

在上篇文章中&#xff0c;我们一起迈入了 Python OpenCV 的奇妙世界&#xff0c;学习了图像的读取、显示和保存等基本操作&#xff1a;用Python和OpenCV开启图像处理魔法之旅-CSDN博客。今天&#xff0c;我们将继续深入&#xff0c;探索图像的各种变换、滤波、边缘检测以及更深…...

单细胞转录组-生物标志物篇 | 从异质性描绘到筛查应用

宫颈癌&#xff08;Cervical cancer, CC&#xff09;是一种常见的妇科恶性肿瘤。尽管目前的筛查方法已被证明有效并显著降低了CC的发病率和死亡率&#xff0c;但仍然存在缺陷。单细胞RNA测序可以在单细胞分辨率下鉴定复杂和稀有的细胞群。通过scRNA-seq&#xff0c;已经绘制和描…...

MQTT:深入剖析 paho.mqtt.embedded - c - master 目录结构

引言 在嵌入式开发领域&#xff0c;消息队列遥测传输&#xff08;MQTT&#xff09;协议因其轻量级、低带宽消耗等特性被广泛应用。Eclipse Paho 项目提供了多种语言的 MQTT 客户端实现&#xff0c;其中paho.mqtt.embedded - c - master是针对 C 语言在嵌入式环境下的 MQTT 客户…...

minio命令行客户端mc常见用法

安装minio命令行客户端mc https://min-io.cn/docs/minio/linux/reference/minio-mc-admin.html # Windows安装minio命令行客户端 choco install minio-client -y# Linux安装mc客户端 wget -c -P /usr/local/bin/ https://dl.min.io/client/mc/release/linux-amd64/mc # 赋予可…...

Mac提示无法打开应用程序DBeaver

问题&#xff1a;安装好后&#xff0c;打开DBeaver时候提示“无法打开应用程序DBeaver” &#xff08;1&#xff09;首先&#xff0c;进入到/Applications/DBeaver.app/Contents/MacOS目录查看可执行程序的权限是否为-rwxr-xr-x&#xff0c;如果不是执行chmod x DBeaver的命令 …...

Dart逆向之函数调用

我们从Blutter恢复的部分IL中可以看到Dart调用函数的逻辑 // 0x180490: r16 <int> // 0x180490: ldr x16, [PP, #0x8a0] ; [pp0x8a0] TypeArguments: <int> // 0x180494: r30 Instance_MethodChannel // 0x180494: ldr lr, [P…...

Word / WPS 页面顶部标题 段前间距 失效 / 不起作用 / 不显示,标题紧贴页眉 问题及解决

问题描述&#xff1a; 在 Word 或者 WPS 里面&#xff0c;如果不是新的一节&#xff0c;而是位于新的一页首行时&#xff0c;不管怎么设置段前间距&#xff0c;始终是失效的&#xff0c;实际段前间距一直是零。 解决方案&#xff1a; 查询了很多方案均无法解决问题&#xff…...

在 ASP.NET Web 应用中解析 JSON 数据实例

在 ASP.NET Web 应用中解析 JSON 数据有多种方法&#xff0c;取决于你使用的是传统的 Web Forms、MVC 还是现代的 Web API。以下是几种常见的解析方法&#xff1a; 1. 使用 Newtonsoft.Json (Json.NET) 这是最常用的 JSON 处理库&#xff0c;需要先安装 NuGet 包&#xff1a;…...

vSphere 8.x Advanced Design(3V0-21.23)题库

最新版vSphere 8.x Advanced Design(3V0-21.23)题库&#xff0c;完整版见上方二维码。 Following a review of security requirements, an architect has confirmed the following requirements: REQ001- A clustered firewall solution must be placed at the perimeter of t…...

vba讲excel转换为word

VBA将excel转换为word Sub ExportToWordFormatted() 声明变量Dim ws As Worksheet 用于存储当前活动的工作表Dim rng As Range 用于存储工作表的使用范围&#xff08;即所有有数据的单元格&#xff09;Dim rowCount As Long, colCount As Long 用于存储数据范围的行数和列数…...

【BUG】远程连接阿里云服务器上的redis报错

出现 Redis Client On Error: Error: connect ECONNREFUSED 47.100.XXX.XX:6379 错误&#xff0c;表明 Redis 客户端无法连接到指定的 Redis 服务器&#xff0c;可按以下步骤排查解决&#xff1a; 1. 检查 Redis 服务器是否运行 操作&#xff1a;在 Redis 服务器所在终端执行…...

数据中台、BI业务访谈(二):组织架构梳理的坑

这是数据中台、BI业务访谈系列的第二篇文章&#xff0c;在上一篇文章中&#xff0c;我重点介绍了在给企业的业务部门、高层管理做业务访谈之前我们要做好行业、业务知识的功课。做好这些功课之后&#xff0c;就到了实际的访谈环节了。 业务访谈关键点 那么在具体业务访谈的时…...

集成学习+泰坦尼克号案例+红酒品质预测

集成学习简介 学习目标&#xff1a; 1.知道集成学习是什么&#xff1f; 2.了解集成学习的分类 3.理解bagging集成的思想 4.理解boosting集成的思想 【知道】集成学习是什么&#xff1f; 集成学习是机器学习中的一种思想&#xff0c;它通过多个模型的组合形成一个精度更高…...

SpringBoot 基础知识,HTTP 概述

1. 概述 1.1 Spring Spring 提供若干个子项目&#xff0c;每个项目用于完成特定功能 Spring 的若干个子项目都基于一个基础的框架&#xff1a;Spring Framework 框架类似于 房屋的地基 但 Spring Framework 配置繁琐&#xff0c;入门难度大 1.2 Spring Boot 于是&#xf…...

背包问题(java)实现

1、01背包 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scannew Scanner(System.in);int nscan.nextInt();int mscan.nextInt();int[][] dpnew int[n1][m1];int[] vnew int[n1];int[] wnew int[n1];for(int i1;i<n;i) {v…...

HDCP(一)

HDCP的核心目标解析 1. 数字内容版权保护 HDCP&#xff08;高带宽数字内容保护&#xff09;的核心目标是防止未经授权的设备对高清音视频内容进行非法复制或截取。它通过加密技术保护数字信号在传输链路&#xff08;如HDMI、DisplayPort、DVI等接口&#xff09;中的安全性&am…...

HTTP 1.0 时代,第一次优化

HTTP 是 “HyperText Transfer Protocol” 的缩写&#xff0c;即超文本传输协议。 相较于最初的设计&#xff0c;1.0增加了以下特性&#xff1a; 增加head&#xff0c;post等新方法。 引入新方法是为了扩充语义&#xff0c;其中 head 方法可以只拿元信息&#xff0c;不必传输…...

【吾爱出品】[Windows] 鼠标或键盘可自定义可同时多按键连点工具

[Windows] 鼠标或键盘连点工具 链接&#xff1a;https://pan.xunlei.com/s/VONSFKLNpyVDeYEmOCBY3WZJA1?pwduik5# [Windows] 鼠标或键盘可自定义可同时多按键连点工具 就是个连点工具&#xff0c;功能如图所示&#xff0c;本人系统win11其他系统未做测试&#xff0c;自己玩…...

计算机网络起源

互联网的起源和发展是一个充满创新、突破和变革的历程&#xff0c;从20世纪60年代到1989年&#xff0c;这段时期为互联网的诞生和普及奠定了坚实的基础。让我们详细回顾这一段激动人心的历史。 计算机的发展与ARPANET的建立&#xff08;20世纪60年代&#xff09; 互联网的诞生…...

Vue3 watch 与 watchEffect 深度解析

Vue3 watch 与 watchEffect 深度解析 一、响应式监听的基石作用 在Vue3的响应式系统中&#xff0c;watch和watchEffect是构建复杂状态逻辑的关键工具。它们实现了对响应式数据的精准监听&#xff0c;支撑着现代前端开发中的状态管理、副作用处理等核心功能。 1.1 演变 Optio…...

服务器信息收集

信息收集又叫打点&#xff0c;打仗也要侦探敌情&#xff0c;攻防更是如此。 但要获取哪些信息呢&#xff1f; 目录 一. 获取公网IP 如何知道一个网站用了CDN&#xff1f; 如何绕过CDN&#xff1f; 二. 旁站信息收集 三. C段主机查询 四. 子域名信息收集 五. 端口信息收…...

Java设计模式之装饰器模式:从入门到架构级实践

一、开篇&#xff1a;为什么需要装饰器模式&#xff1f; 在软件开发中&#xff0c;我们经常面临这样的困境&#xff1a;如何在不修改原有对象结构的情况下&#xff0c;动态地扩展对象的功能&#xff1f;当系统需要为对象添加多种可能的扩展功能时&#xff0c;如果直接使用继承…...

Vue3性能优化全攻略:从原理到极致性能实战

一、性能瓶颈深度诊断 1.1 关键性能指标分析 1.2 性能剖析工具矩阵 工具类型典型工具适用场景检测维度综合检测工具Lighthouse首屏加载性能分析加载评分/优化建议运行时监控工具Web Vitals页面交互性能监控FCP/LCP/TTI等框架专项工具Vue Devtools组件渲染性能分析渲染耗时/更…...

阿里云 AI 搜索开放平台:从算法到业务——AI 搜索驱动企业智能化升级

——已获知乎作者【GitHub Daily】授权转载 目前大模型的强大能力&#xff0c;使其成为一些企业和行业的主要创新驱动力&#xff0c;企业亟需重新审视和调整现有的创新机制&#xff0c;以适应AI技术和大数据的快速发展。目前很多企业已经开始尝试大模型在业务中进行赋能&#x…...

特权FPGA之AT24C02 IIC实现

0 简介 IIC的物理层 IIC一共有只有两个总线&#xff1a; 一条是双向的串行数据线&#xff33;&#xff24;&#xff21;&#xff0c;一条是串行时钟线&#xff33;&#xff23;&#xff2c;. SDA(Serial data)是数据线&#xff0c;D代表Data也就是数据&#xff0c;Send Data …...

Docker 容器内运行程序的性能开销

在 Docker 容器内运行程序通常会有一定的性能开销&#xff0c;但具体损失多少取决于多个因素。以下是详细分析&#xff1a; 1. CPU 性能 理论开销&#xff1a;容器直接共享宿主机的内核&#xff0c;CPU 调度由宿主机管理&#xff0c;因此 CPU 运算性能几乎与原生环境一致&…...

SpringBoot依赖冲突引发的 log4j 日志打印问题及解决方法

依赖冲突引发的 log4j 日志打印问题及解决方法 在软件开发过程中&#xff0c;依赖管理是至关重要的一环。然而&#xff0c;时常会遇到依赖冲突的情况&#xff0c;其中就包括影响日志框架正常使用&#xff0c;比如因依赖冲突导致无法正常打印 log4j 日志的问题。 问题描述 当…...

MacOS中的鼠标、触控板的设置研究

一、背景和写这篇文章的原因 想搞清楚和配置好鼠标&#xff0c;比如解决好为什么我的滚动那么难用&#xff1f;怎么设置滚轮的方向跟windows相同&#xff1f;调整双击速度&#xff0c;调整鼠标滚轮左右拨动的"冷却时间"。 二、各种设置之详细解释 1. MacOS设置 -&…...

Clickhouse试用单机版部署

问题 最近需要试用clklog数据收集的社区版&#xff0c;clklog用数据库是Clickhouse。这就需要我先单机部署一个Clickhouse数据库&#xff0c;先试用试用。 步骤 这里假设我们已经拥有一台Ubuntu的服务器了&#xff0c;现在我们需要在这台机器上面安装Clickhouse数据库。Clic…...

【运维 | 硬件】服务器中常见的存储插槽类型、对应的传输协议及其特性总结

Why&#xff1a;最近更换设备&#xff0c;具体了解一下。 传输协议对比 协议 底层接口 最大带宽 队列深度 典型延迟 适用场景 AHCI SATA 6 Gbps (~600 MB/s) 单队列&#xff08;32命令&#xff09; 较高 传统 HDD/SATA SSD SAS SAS 24 Gbps (~2.4 GB/s) 单队列&…...

本地laravel项目【dcat-admin】部署到liunx服务器

文章目录 前言一、部署流程1、数据库搬迁2、宝塔创建网站&#xff0c;配置php3、修改nginx配置4、在public目录设置软连接5、修改env配置、刷新缓存 二、其他问题1.后台登陆失败问题2.完美解决接口跨域问题 总结 前言 laravel新手记录 差不多一个月&#xff0c;总算用laravel…...

DeepSeek:AI如何重构搜索引擎时代的原创内容生态

一、当生成式AI遇上搜索引擎&#xff1a;一场效率与价值的博弈 2023年&#xff0c;全球搜索引擎处理了超过2万亿次查询&#xff0c;其中超40%涉及复杂问题解答。而与此同时&#xff0c;Google的"Helpful Content Update"算法升级直接淘汰了26%的低质AI生成页面。这场…...

在docker里装rocketmq-console

首先要到github下载&#xff08;这个一般是需要你有梯子&#xff09; GitHub - apache/rocketmq-externals at release-rocketmq-console-1.0.0 如果没有梯子&#xff0c;用下面这个百度网盘链接下 http://链接: https://pan.baidu.com/s/1x8WQVmaOBjTjss-3g01UPQ 提取码: fu…...

蓝桥杯C++组算法知识点整理 · 考前突击(上)【小白适用】

【背景说明】本文的作者是一名算法竞赛小白&#xff0c;在第一次参加蓝桥杯之前希望整理一下自己会了哪些算法&#xff0c;于是有了本文的诞生。分享在这里也希望与众多学子共勉。如果时间允许的话&#xff0c;这一系列会分为上中下三部分和大家见面&#xff0c;祝大家竞赛顺利…...

Docker 是什么? Docker 基本观念介绍与容器和虚拟机的比较

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;历代文学&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;高并发设计&#xf…...

Docker:安装与部署 Nacos 的技术指南

1、简述 Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个动态服务发现、配置管理和服务治理的综合解决方案,适用于微服务架构。 Nacos 主要功能: 服务发现与注册:支持 Dubbo、Spring Cloud 等主流微服务框架的服务发现与注册。动态配置管理:支持…...

UE5 RPC调用示例详解

文章目录 前言一、示例场景二、代码实现三、关键点解析3.1 RPC类型选择3.2 可靠性设置3.3 权限控制3.4 输入处理 四、测试与验证总结 前言 在UE5中&#xff0c;RPC&#xff08;远程过程调用&#xff09;是实现多人游戏逻辑同步的核心机制。以下通过一个玩家跳跃的示例&#xf…...

MATLAB在工程领域的实际应用案例

文章目录 前言自动驾驶汽车路径规划系统汽车先进驾驶辅助系统&#xff08;ADAS&#xff09;开发控制电气系统设计与优化桥梁结构分析与安全性评估 前言 MATLAB 在工程领域应用广泛&#xff0c;能解决复杂问题、优化系统设计。下面从不同工程领域选取了具有代表性的案例&#x…...

【完美解决】VSCode连接HPC节点,已配置密钥却还是提示需要输入密码

目录 问题描述软件版本原因分析错误逻辑链 解决方案总结 问题描述 本人在使用 ​​VSCode Remote-SSH 插件​​连接超算集群节点时&#xff0c;遇到以下问题&#xff1a;已正确配置 SSH 密钥&#xff0c;且 VSCode 能识别密钥文件&#xff08;如图1&#xff09;&#xff0c;但在…...

智能物联网网关策略部署

实训背景 某智慧工厂需部署物联网网关&#xff0c;实现以下工业级安全管控需求&#xff1a; 设备准入控制&#xff1a;仅允许注册MAC地址的传感器接入&#xff08;白名单&#xff1a;AA:BB:CC:DD:EE:FF&#xff09;。协议合规性&#xff1a;禁止非Modbus TCP&#xff08;端口…...

玩转代理 IP :实战爬虫案例

在现代互联网环境下&#xff0c;爬虫不仅是数据获取的利器&#xff0c;也成为应对网站反爬机制的技术博弈。而在这场博弈中&#xff0c;"代理 IP" 是核心武器之一。本文将以高匿名的代理ip为核心&#xff0c;结合 Python 实战、代理策略设计、高匿技巧与反封锁优化&a…...

Deepseek解锁科研绘图新方式

在科研领域&#xff0c;一张清晰、准确且美观的图片往往能比冗长的文字更有效地传达研究成果。从展示实验数据的图表&#xff0c;到阐述理论模型的示意图&#xff0c;科研绘图贯穿于研究的各个环节。然而&#xff0c;传统的科研绘图工具往往操作复杂&#xff0c;学习成本高&…...

【unity游戏开发入门到精通——动画篇】Animator反向动力学(IK)

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…...