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

OpenCV --- 图像预处理(六)

OpenCV — 图像预处理(六)


文章目录

  • OpenCV --- 图像预处理(六)
  • 十四,图像边缘检测
    • 14.1 高斯滤波
    • 14.2 计算图像的梯度与方向
    • 14.3 非极大值抑制
    • 14.4 双阈值筛选
    • 14.5 API和使用
  • 十五,绘制图像轮廓
    • 15.1 什么是轮廓
    • 15.2 寻找轮廓
      • 15.2.1 mode参数
      • 15.2.2 method参数
    • 15.3 绘制轮廓
  • 十六,凸包特征检测
    • 16.1 获取凸包点
    • 16.2 绘制凸包


十四,图像边缘检测

14.1 高斯滤波

边缘检测本身属于锐化操作,对噪点比较敏感,所以需要进行平滑处理。这里使用的是一个5*5的高斯核对图像进行消除噪声。上一个实验中已经介绍了高斯滤波的具体过程,这里就不再过多叙述,只展示一下用到的5*5的高斯核

14.2 计算图像的梯度与方向

这里使用了sobel算子来计算图像的梯度值,在上一章节中,我们了解到sobel算子其实就是一个核值固定的卷积核,如下所示:
s o b e l ( 水平方向 ) = [ − 1 0 1 − 2 0 2 − 1 0 1 ] sobel(水平方向)=\left[\begin{array}{c c c}{{-1}}&{{0}}&{{1}}\\ {{-2}}&{{0}}&{{2}}\\ {{-1}}&{{0}}&{{1}}\end{array}\right] sobel(水平方向)= 121000121

s o b e l ( 垂直方向 ) = [ − 1 − 2 − 1 0 0 0 1 2 1 ] sobel(垂直方向)=\left[\begin{array}{c c c}{{-1}}&{{-2}}&{{-1}}\\ {{0}}&{{0}}&{{0}}\\ {{1}}&{{2}}&{{1}}\end{array}\right] sobel(垂直方向)= 101202101

首先使用sobel算子计算中心像素点的两个方向上的梯度 G x G_{x} Gx G y G_{y} Gy,然后就能够得到其具体的梯度值:
G = G x 2 + G y 2 G={\sqrt{G_{x}{}^{2}+G_{y}{}^{2}}} G=Gx2+Gy2
也可以使用 G = ∣ G x + G y ∣ G=|G_{x}+G_{y}| G=Gx+Gy来代替。在OpenCV中,默认使用 G = ∣ G x + G y ∣ G=|G_{x}+G_{y}| G=Gx+Gy来计算梯度值。

然后我们根据如下公式可以得到一个角度值

G y G x = tan ⁡ ( θ ) {\frac{G_{\mathrm{y}}}{G_{x}}}=\tan\,(\theta) GxGy=tan(θ)
θ = arctan ⁡ ( G y G x ) \theta=\arctan\,({\frac{G_{\mathrm{y}}}{G_{x}}}) θ=arctan(GxGy)
这个角度值其实是当前边缘的梯度的方向。通过这个公式我们就可以计算出图片中所有的像素点的梯度值与梯度方向,然后根据梯度方向获取边缘的方向。

a). 并且如果梯度方向不是0°、45°、90°、135°这种特定角度,那么就要用到插值算法来计算当前像素点在其方向上进行插值的结果了,然后进行比较并判断是否保留该像素点。这里使用的是单线性插值,通过A1和A2两个像素点获得dTmp1与dTmp2处的插值,然后与中心点C进行比较(非极大值抑制)。具体的插值算法请参考图像旋转实验。

b). 得到 θ \theta θ的值之后,就可以对边缘方向进行分类,为了简化计算过程,一般将其归为四个方向:水平方向、垂直方向、45°方向、135°方向。并且:

θ \theta θ值为-22.5°~22.5°,或-157.5°~157.5°,则认为边缘为水平边缘;

当法线方向为22.5°~67.5°,或-112.5°~-157.5°,则认为边缘为45°边缘;

当法线方向为67.5°~112.5°,或-67.5°~-112.5°,则认为边缘为垂直边缘;

当法线方向为112.5°~157.5°,或-22.5°~-67.5°,则认为边缘为135°边缘;
在这里插入图片描述

14.3 非极大值抑制

得到每个边缘的方向之后,其实把它们连起来边缘检测就算完了,但是为什么还有这一步与下一步呢?是因为经过第二步得到的边缘不经过处理是没办法使用的,因为高斯滤波的原因,边缘会变得模糊,导致经过第二步后得到的边缘像素点非常多,因此我们需要对其进行一些过滤操作,而非极大值抑制就是一个很好的方法,它会对得到的边缘像素进行一个排除,使边缘尽可能细一点。

在该步骤中,我们需要检查每个像素点的梯度方向上的相邻像素,并保留梯度值最大的像素,将其他像素抑制为零。假设当前像素点为(x,y),其梯度方向是0°,梯度值为G(x,y),那么我们就需要比较G(x,y)与两个相邻像素的梯度值:G(x-1,y)和G(x+1,y)。如果G(x,y)是三个值里面最大的,就保留该像素值,否则将其抑制为零。

14.4 双阈值筛选

经过非极大值抑制之后,我们还需要设置阈值来进行筛选,当阈值设的太低,就会出现假边缘,而阈值设的太高,一些较弱的边缘就会被丢掉,因此使用了双阈值来进行筛选,推荐高低阈值的比例为2:1到3:1之间,其原理如下图所示:
在这里插入图片描述
当某一像素位置的幅值超过最高阈值时,该像素必是边缘像素;当幅值低于最低像素时,该像素必不是边缘像素;幅值处于最高像素与最低像素之间时,如果它能连接到一个高于阈值的边缘时,则被认为是边缘像素,否则就不会被认为是边缘。也就是说,上图中的A和C是边缘,B不是边缘。因为C虽然不超过最高阈值,但其与A相连,所以C就是边缘。

14.5 API和使用

edges = cv2.Canny(image, threshold1, threshold2),即使读到的是彩色图也可以进行处理。

  • image:输入的灰度/二值化图像数据。

  • threshold1:低阈值,用于决定可能的边缘点。

  • threshold2:高阈值,用于决定强边缘点。

#图像边缘检测
img = cv.imread('txycl/images/shudu.png')
ret,imgbinary = cv.threshold(img,127,255,cv.THRESH_BINARY)
#canny
img_canny = cv.Canny(img,100,200)
cv.imshow('img_canny',img_canny)
cv.imshow('imgbinary',imgbinary)
cv.waitKey(0)
cv.destroyAllWindows()

在这里插入图片描述

十五,绘制图像轮廓

15.1 什么是轮廓

轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。相对于边缘,轮廓是连续的,边缘不一定连续
轮廓的作用

  • 形状分析
  • 目标识别
  • 图像分割

15.2 寻找轮廓

寻找轮廓需要将图像做一个二值化处理,并且根据图像的不同选择不同的二值化方法来将图像中要绘制轮廓的部分置为白色,其余部分置为黑色。也就是说,我们需要对原始的图像进行灰度化、二值化的处理,令目标区域显示为白色,其他区域显示为黑色,之后,对图像中的像素进行遍历,当一个白色像素相邻(上下左右及两条对角线)位置有黑色像素存在或者一个黑色像素相邻(上下左右及两条对角线)位置有白色像素存在时,那么该像素点就会被认定为边界像素点,轮廓就是有无数个这样的边界点组成的

contours,hierarchy = cv2.findContours(image,mode,method)
  • contours:表示获取到的轮廓点的列表。检测到有多少个轮廓,该列表就有多少子列表,每一个子列表都代表了一个轮廓中所有点的坐标。

  • hierarchy:表示轮廓之间的关系。对于第i条轮廓, h i e r a r c h y [ i ] [ 0 ] hierarchy[i][0] hierarchy[i][0], h i e r a r c h y [ i ] [ 1 ] hierarchy[i][1] hierarchy[i][1] , h i e r a r c h y [ i ] [ 2 ] hierarchy[i][2] hierarchy[i][2] ,$ hierarchy[i][3]$分别表示其后一条轮廓、前一条轮廓、(同层次的第一个)子轮廓、父轮廓的索引(如果没有相应的轮廓,则对应位置为-1)。该参数的使用情况会比较少。

  • image:表示输入的二值化图像。

  • mode:表示轮廓的检索模式。

  • method:轮廓的表示方法。

15.2.1 mode参数

轮廓查找方式。返回不同的层级关系。

mode参数共有四个选项分别为:RETR_LIST,RETR_EXTERNAL,RETR_CCOMP,RETR_TREE。

  1. RETR_EXTERNAL

表示只查找最外层的轮廓。并且在hierarchy里的轮廓关系中,每一个轮廓只有前一条轮廓与后一条轮廓的索引,而没有父轮廓与子轮廓的索引。

2.3.4.会查找所有轮廓,但会有层级关系。

  1. RETR_LIST

表示列出所有的轮廓。并且在hierarchy里的轮廓关系中,每一个轮廓只有前一条轮廓与后一条轮廓的索引,而没有父轮廓与子轮廓的索引。

RETR_CCOMP

表示列出所有的轮廓。并且在hierarchy里的轮廓关系中,轮廓会按照成对的方式显示。

RETR_CCOMP 模式下,轮廓被分为两个层级:

  • 层级 0:所有外部轮廓(最外层的边界)。
  • 层级 1:所有内部轮廓(孔洞或嵌套的区域)。

RETR_TREE

表示列出所有的轮廓。并且在hierarchy里的轮廓关系中,轮廓会按照树的方式显示,其中最外层的轮廓作为树根,其子轮廓是一个个的树枝。

15.2.2 method参数

轮廓存储方法。轮廓近似方法。决定如何简化轮廓点的数量。就是找到轮廓后怎么去存储这些点。

method参数有三个选项:CHAIN_APPROX_NONE、CHAIN_APPROX_SIMPLE、CHAIN_APPROX_TC89_L1。

  • CHAIN_APPROX_NONE表示将所有的轮廓点都进行存储

  • CHAIN_APPROX_SIMPLE表示只存储有用的点,比如直线只存储起点和终点,四边形只存储四个顶点,默认使用这个方法;

对于mode和method这两个参数来说,一般使用RETR_EXTERNAL和CHAIN_APPROX_SIMPLE这两个选项。

15.3 绘制轮廓

轮廓找出来后,其实返回的是一个轮廓点坐标的列表,因此我们需要根据这些坐标将轮廓画出来,因此就用到了绘制轮廓的方法。

cv2.drawContours(image, contours, contourIdx, color, thickness)
  • image:原始图像,一般为单通道或三通道的 numpy 数组。
  • contours:包含多个轮廓的列表,每个轮廓本身也是一个由点坐标构成的二维数组(numpy数组)。
  • contourIdx:要绘制的轮廓索引。如果设为 -1,则会绘制所有轮廓。根据索引找到轮廓点绘制出来。默认是-1。
  • color:绘制轮廓的颜色,可以是 BGR 值或者是灰度值(对于灰度图像)。
  • thickness:轮廓线的宽度,如果是正数,则画实线;如果是负数,则填充轮廓内的区域。
import cv2 as cv
import numpy as np#读图,转灰度
number = cv.imread('txycl/images/num.png',cv.IMREAD_GRAYSCALE)#二值化
ret,binary = cv.threshold(number,127,255,cv.THRESH_OTSU+cv.THRESH_BINARY_INV)#查找轮廓
contours,h = cv.findContours(binary,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)#绘制轮廓
cv.drawContours(binary,contours,-1,(0,0,255),2)#显示图像
cv.imshow('number',number)
cv.imshow('binary',binary)
cv.waitKey(0)
cv.destroyAllWindows()
print(contours)

在这里插入图片描述

十六,凸包特征检测

在进行凸包特征检测之前,首先要了解什么是凸包。通俗的讲,凸包其实就是将一张图片中物体的最外层的点连接起来构成的凸多边形,它能包含物体中所有的内容。

一般来说,凸包都是伴随着某类点集存在的,也被称为某个点集的凸包。

对于一个点集来说,如果该点集存在凸包,那么这个点集里面的所有点要么在凸包上,要么在凸包内。

凸包检测常用在物体识别、手势识别、边界检测等领域。

  • 穷举法

将集中的点进行两两配对,并进行连线,对于每条直线,检查其余所有的点是否处于该直线的同一侧,如果是,那么说明构成该直线的两个点就是凸包点,其余的线依次进行计算,从而获取所有的凸包点。

用向量的思想,点都是有坐标的,连起来就可以构成一个向量。再以其中一个点,连接另一个点,构成另一个向量,让两个向量做外积,就是叉积。也就是 s t d = ∣ 向量 a ∣ ∗ ∣ 向量 b ∣ ∗ s i n ( θ ) std=|向量a|*|向量b|*sin(\theta) std=向量a向量bsin(θ),能控制 s t d std std的正负的只能是 θ \theta θ,如果计算出来的 s t d std std的正负都相同,说明这些点都在这条直线的同一侧,那么这两个点就是凸包的边界点。然后换两个点,就是说换一条直线,换一个向量,继续进行检测,直到找到凸包的所有的边界点。

缺点:时间复杂度高,不断使用for循环,耗时

  • QuickHull法
    将所有点放在二维坐标系中,找到横坐标最小和最大的两个点 P 1 P_1 P1 P 2 P_2 P2并连线。此时整个点集被分为两部分,直线上为上包,直线下为下包。

以上保暖为例,找到上包中的点距离该直线最远的点 P 3 P_3 P3,连线并寻找直线 P 1 P 3 P1P3 P1P3左侧的点 P 2 P 3 P2P3 P2P3右侧的点,然后重复本步骤,直到找不到为止。对下包也是这样操作
在这里插入图片描述

16.1 获取凸包点

cv2.convexHull(points)

  • points:输入参数,图像的轮廓

16.2 绘制凸包

cv2.polylines(image, pts, isClosed, color, thickness=1)

  • image:要绘制线条的目标图像,它应该是一个OpenCV格式的二维图像数组(如numpy数组)。
  • pts:一个二维 numpy 数组,每个元素是一维数组,代表一个多边形的一系列顶点坐标。
  • isClosed:布尔值,表示是否闭合多边形,如果为 True,会在最后一个顶点和第一个顶点间自动添加一条线段,形成封闭的多边形。
  • color:线条颜色,可以是一个三元组或四元组,分别对应BGR或BGRA通道的颜色值,或者是灰度图像的一个整数值。
  • thickness(可选):线条宽度,默认值为1。
#绘制轮廓img = cv.imread('txycl/images/tu.png')
#灰度图
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#二值化处理,阈值法 因为目标是白色我们需要白色
ret, binary = cv.threshold(gray, 200, 255, cv.THRESH_BINARY)
# cv.imwrite("./002.png",binary)
#查找轮廓
contours, h = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
# cv.drawContours(img, contours,-1,(0,0,255),2)
#查找凸包
hull = cv. convexHull(contours[0])
for i in range(len(contours)):hull=cv.convexHull(contours[i])
#绘制凸包
cv.polylines(img, [hull], True, (0, 0, 255), 3)
print(hull)
cv.imshow('1', img)
cv.imshow('2', binary)
cv.waitKey(0)

在这里插入图片描述

相关文章:

OpenCV --- 图像预处理(六)

OpenCV — 图像预处理(六) 文章目录 OpenCV --- 图像预处理(六)十四,图像边缘检测14.1 高斯滤波14.2 计算图像的梯度与方向14.3 非极大值抑制14.4 双阈值筛选14.5 API和使用 十五,绘制图像轮廓15.1 什么是轮…...

WebRTC服务器Coturn服务器的管理平台功能

1、概述 开源的webrtc服务器提供管理平台功能,用户可以通过web页面进行访问配置coturn服务器,主要包括管理平台功能和telnet的管理功能,coturn相当于telnet服务器,可能通过配置来开启这两个功能,方便查看coturn服务器…...

华为网路设备学习-19 路由策略

一、 二、 注意: 当该节点匹配模式为permit下时,参考if else 当该节点匹配模式为deny下时: 1、该节点中的apply子语句不会执行。 2、如果满足所有判断(if-match)条件时,拒绝该节点并跳出(即不…...

理解RAG第六部分:有效的检索优化

在RAG系统中,识别相关上下文的检索器组件的性能与语言模型在生成有效响应方面的性能同样重要,甚至更为重要。因此,一些改进RAG系统的努力将重点放在优化检索过程上。 从检索方面提高RAG系统性能的一些常见方法。通过实施高级检索技术&#x…...

DOCA介绍

本文分为两个部分: DOCA及BlueField介绍如何运行DOCA应用,这里以DNS_Filter为例子做大致介绍。 DOCA及BlueField介绍: 现代企业数据中心是软件定义的、完全可编程的基础设施,旨在服务于跨云、核心和边缘环境的高度分布式应用工作…...

Hadoop----高可用搭建

目录标题 **什么是高可用?****⭐搭建的步骤**一.jdk**安装配置**- **要点**: 二.zookeeper**集群配置**- **要点** 三.Hadoop高可用的搭建- **要点**①环境变量的配置②配置文件的修改 ③内容分发④集群任务的初次启动 什么是高可用? 通过冗余设计 自动…...

2023蓝帽杯初赛内存取证-1

获取关于内存镜像文件的基本信息: vol.py -f memdump.mem imageinfo 得知Image local date and time : 2023-06-21 01:02:27 0800 Image local date and time是本地时区(中国——东八区) 答案:2023-06-21 01:02:27...

算法之回溯法

回溯法 回溯法定义与概念核心思想回溯法的一般框架伪代码表示C语言实现框架 回溯法的优化技巧剪枝策略实现剪枝的C语言示例记忆化搜索 案例分析N皇后问题子集和问题全排列问题寻路问题 回溯法的可视化理解决策树状态空间树回溯过程 回溯法与其他算法的比较回溯法与动态规划的区…...

Linux 内核中 cgroup(控制组) 作用是什么?

cgroup(Control Groups) 是 Linux 内核提供的一种机制,用于对 进程(或线程)组 进行资源限制、优先级分配、统计监控和任务控制。通过将进程分组管理,可以实现对 CPU、内存、磁盘 I/O、网络等系统资源的精细…...

Relay IR的核心数据结构

在 Apache TVM 的 Relay IR 中,基础节点(Var、Const、Call、Function 和 Expr)是构建计算图的核心数据结构。以下是对它们的详细解析,包括定义、作用、内部组成及相互关系: 1. Expr(表达式基类)…...

【MCP Node.js SDK 全栈进阶指南】初级篇(4):MCP工具开发基础

在MCP(模型上下文协议)的生态系统中,工具(Tools)是一种强大的扩展机制,允许AI模型执行各种操作并获取结果。本文将深入探讨MCP TypeScript-SDK中的工具开发基础,包括工具定义与参数验证、Zod模式详解与高级用法、异步工具处理与错误管理以及工具调用与结果格式化。通过学…...

3Blue1Brown/videos - 数学视频生成代码库

本文翻译整理自:https://github.com/3b1b/videos 文章目录 一、关于本项目相关链接资源关键功能特性 二、注意事项三、工作流1、核心原理2、Sublime 专用配置 四、快捷键功能说明 一、关于本项目 本项目包含用于生成 3Blue1Brown 数学解说视频的代码。 相关链接资源…...

vue3 + element-plus中el-drawer抽屉滚动条回到顶部

el-drawer抽屉滚动条回到顶部 <script setup lang"ts" name"PerformanceLogQuery"> import { ref, nextTick } from "vue"; ...... // 详情 import { performanceLogQueryByIdService } from "/api/performanceLog"; const onD…...

【inlining failed in call to always_inline ‘_mm_aesenclast_si128’】

gcc编译错误&#xff1a;inlining failed in call to always_inline ‘_mm_aesenclast_si128’: target specific option mismatch 消除方法&#xff1a; 假如是GCC&#xff0c;则CFLAGS添加如下编译选项&#xff1a;-maes 假如是cmake&#xff0c;参加如下脚本&#xff1a; …...

DB-GPT支持mcp协议配置说明

简介 在 DB-GPT 中使用 MCP&#xff08;Model Context Protocol&#xff09;协议&#xff0c;主要通过配置 MCP 服务器和智能体协作实现外部工具集成与数据交互。 开启mcp服务&#xff0c;这里以网页抓取为例 npx -y supergateway --stdio "uvx mcp-server-fetch" …...

前端之勇闯DOM关

一、DOM简介 1.1什么是DOM 文档对象类型&#xff08;Document Object Model&#xff0c;简称DOM&#xff09;&#xff0c;是W3C组织推荐的处理课扩展标记语言&#xff08;HTML或者XML&#xff09;的标准编程接口 W3C已经定义了一系列的DOM接口&#xff0c;通过这些DOM接口可…...

实现鼠标拖拽图片效果

我们需要一个图片 可以是你的女朋友 可以是男朋友 &#xff0c;我就拿窝的偶像 一个大佬——>甘为例吧&#xff01; 哈哈哈哈哈 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&q…...

nodejs模块暴露数据的方式,和引入(导入方式)方式

在 Node.js 中&#xff0c;模块之间通过 模块导出&#xff08;exports&#xff09; 和 模块导入&#xff08;require 或 ESModule 的 import&#xff09; 来进行数据和功能的共享。下面我详细总结一下两种主要的模块系统&#xff1a; 一、CommonJS 模块&#xff08;Node.js 默认…...

AXOP33552: 400MHz 高速双通道运算放大器

AXOP33552是一款通用型高速双通道运算放大器&#xff0c;产品的工作电压为2V至5.5V&#xff0c;具有400MHz的带宽&#xff0c;f0.1dB的带宽为 120MHz&#xff0c;单通道静态电流为10mA。产品特别对噪声和THD做了优化&#xff0c;其噪声为5nV/√Hz 1MHz&#xff0c;2次谐波为-85…...

Spring Boot日志配置

目录 logback 使用logback 获取日志对象 日志级别 控制日志输出级别 日志输出格式控制 配置方式 日志转存 示例 日志是应用程序不可或缺的一部分&#xff0c;记录着程序运行的信息。主要作用有&#xff1a; 记录日常运营的重要信息记录应用报错信息记录过程数据等…...

不可变数据:基于持久化数据结构的状态管理

不可变数据:基于持久化数据结构的状态管理 一、 什么是不可变数据&#xff1f; 不可变数据是指一旦创建就无法更改的数据。在计算机科学中&#xff0c;不可变数据结构是指其内容或状态不能被修改的数据结构。在不可变数据中&#xff0c;所有修改操作都会生成新的数据副本&#…...

PyTorch卷积层填充(Padding)与步幅(Stride)详解及代码示例

本文通过具体代码示例讲解PyTorch中卷积操作的填充&#xff08;Padding&#xff09;和步幅&#xff08;Stride&#xff09;对输出形状的影响&#xff0c;帮助读者掌握卷积层的参数配置技巧。 一、填充与步幅基础 填充&#xff08;Padding&#xff09;&#xff1a;在输入数据边缘…...

C++手撕STL-其叁

Deque 今天我们进入新的容器&#xff1a;deque&#xff0c;一般叫做双端队列。 比起传统的先入先出的队列queue&#xff0c;deque的出场率显然要低得多&#xff0c;事实上deque比起queue来说最大的特点就是多了一个push_front()和pop_front()&#xff0c;其他并没有太多不同。…...

AI大模型-window系统CPU版安装anaconda以及paddle详细步骤-亲测有效

window系统CPU版安装anaconda以及paddle详细步骤-亲测有效 一 安装anaconda 下载地址:anaconda下载 下载成功后,选择非C盘安装,按提示安装即可修改镜像文件 安装成功后,运行anaconda软件,若提示更新则点击更新,更新完后,修改镜像文件 找到用户目录下的.condarc文件,覆…...

UML概览

&#x1f970;名片&#xff1a; &#x1f433;作者简介&#xff1a;乐于分享知识的大二在校生 &#x1f333;本系列专栏: (点击直达)统一建模语言UML &#x1fae3;致读者&#xff1a;欢迎评论与私信,对于博客内容的疑问都会尽量回复哒!!! 本文序&#xff1a; ⛰️本文介绍&…...

影刀填写输入框(web) 时出错: Can not convert Array to String

环境&#xff1a; 影刀5.26.24 Win10专业版 问题描述&#xff1a; [错误来源]行12: 填写输入框(web) 执行 填写输入框(web) 时出错: Can not convert Array to String. 解决方案&#xff1a; 1. 检查变量内容 在填写输入框之前&#xff0c;打印BT和NR变量的值&#xff…...

LLMs可在2位精度下保持高准确率

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

C语言高频面试题——结构体和联合体区别

在 C 语言中&#xff0c;结构体&#xff08;struct&#xff09; 和 联合体&#xff08;union&#xff09; 是两种重要的复合数据类型&#xff0c;用于组织和管理多个相关的变量。尽管它们在语法上有些相似&#xff0c;但在内存布局、用途和行为上有显著的区别。以下是详细的对比…...

App爬虫工具篇-mitmproxy

mitmproxy 是一个支持 HTTP 和 HTTPS 的抓包程序,类似 Fiddler、Charles 的功能,它通过控制台的形式和ui界面的方式 此外,mitmproxy 还有两个关联组件,一个是 mitmdump,它是 mitmproxy 的命令行接口,利用它可以对接 Python 脚本,实现监听后的处理;另一个是 mitmweb,它…...

配置openjdk调试环境

先决条件 首先在Ubuntu 18.04上编译SlowDebug版本的openjdk。注意&#xff0c;这里我选择的是x86处理器的电脑。苹果M系列属于ARM芯片&#xff0c;指令集不一样。由于我在苹果上进行垃圾回收调试的时候会报SIGILL错误。为了了解JVM的内部工作原理&#xff0c;不要在这种问题上…...

加油站小程序实战教程13充值规则配置

目录 1 创建数据源2 搭建管理功能最终效果 我们目前已经实现了会员的注册以及登录功能&#xff0c;有了基础的认证之后就进入到了业务部分的开发。会员的话首先是可以进行充值&#xff0c;在充值的时候通常会有一定的赠送&#xff0c;本篇我们来开发一下充值规则的配置功能。 1…...

jQuery — 总结

介绍 jQuery是一款高效、轻量级的JavaScript库&#xff0c;旨在简化网页开发中的常见任务。自2006年发布以来&#xff0c;它凭借直观的语法和强大的功能迅速成为前端开发的标配工具。其核心设计理念是“写更少&#xff0c;做更多”&#xff0c;通过封装复杂的原生JavaScript操作…...

【信息安全工程师备考笔记】第二章 网络信息安全概述

第二章 网络攻击原理与常用方法 2.1 网络攻击概述 概念&#xff1a;损害网络 系统安全属性 的危害行为 危害行为基本类型 信息泄露攻击&#xff08;机密性&#xff09;完整性破坏攻击&#xff08;完整性&#xff09;拒绝服务攻击&#xff08;可用性&#xff09;非法使用攻击…...

国家自然科学基金答辩ppt制作案例模板下载

国家自然科学基金 National Natural Science Foundation of China 支持基础研究&#xff0c;坚持自由探索&#xff0c;发挥导向作用&#xff0c;发现和培养科学技术人才&#xff0c;促进科学技术进步和经济社会协调发展&#xff0c;逐渐形成和发展了由研究项目、人才项目和环境…...

代码随想录第三十七天|华为秋季笔试真题230823

刷题小记&#xff1a; 主要偏向扎实编码基础的考察&#xff0c;但貌似近些年题目难度有所提高&#xff0c;仅供参考。 卡码网136.获取连通的相邻节点列表&#xff08;卡码网136.获取连通的相邻节点列表&#xff09; 题目分析&#xff1a; 题目描述&#xff1a; 存在N个转发…...

KUKA机器人KR 3 D1200 HM介绍

KUKA KR 3 D1200 HM是一款小型机器人&#xff0c;型号中HM代表“Hygienic Machine&#xff08;卫生机械&#xff09;用于主副食品行业”&#xff0c;也是一款并联机器人。用于执行高速、高精度的抓取任务。这款机器人采用食品级不锈钢设计&#xff0c;额定负载为3公斤&#xff…...

从零开始创建MCP Server实战指南

一、MCP协议核心概念 1.1 什么是MCP&#xff1f; MCP&#xff08;Model Context Protocol&#xff09; 是一个标准化的“沟通规则”&#xff0c;由公司Anthropic提出&#xff0c;专门用于让大语言模型&#xff08;LLM&#xff0c;比如通义千问、ChatGPT等&#xff09;与外部工…...

C语言教程(十二):C 语言数组详解

一、引言数组的基本概念 数组是一组具有相同数据类型的元素的集合&#xff0c;这些元素在内存中连续存储。通过一个统一的数组名和下标来访问数组中的每个元素。使用数组可以方便地处理大量相同类型的数据&#xff0c;避免为每个数据单独定义变量。 二、一维数组 2.1 数组的…...

Linux[基础指令][2]

Linux[基础指令][2] cp(复制) 格式:cp [-rf] 源文件 {普通文件,目录} 拷贝 cp -r 递归拷贝目录 蓝色为目录,白色为具体文件 拷贝后面加一个不存在的文件会新建文件再拷贝 cp -ir -i是覆盖的时候询问 如果目标文件存在就会覆盖原有文件 mv(重命名/剪切) 格式:mv 源文件…...

MySQL_MCP_Server_pro接入cherry_studio实现大模型操作数据库

大模型直接与数据库交互&#xff0c;实现基本增删改查操作。首先贴下代码地址&#xff1a; https://github.com/wenb1n-dev/mysql_mcp_server_pro 安装环境&#xff1a;win10 1、下载代码 git clone https://github.com/wenb1n-dev/mysql_mcp_server_pro 2、使用conda创建…...

linux命令集

命令 grep -r --includeAndroid.bp libcfs ./ ​参数说明 选项/参数作用-r递归搜索子目录。--includeAndroid.bp仅搜索名为 Android.bp 的文件&#xff08;精确匹配文件名&#xff09;。libcfs要搜索的关键字&#xff08;单引号包裹特殊字符如 以避免被 Shell 解析&#xff…...

数据结构:链表

链表的概念及结构&#xff1a; 链表的概念&#xff1a; 链表是一种物理储存结构上非连续的储存结构&#xff0c;数据元素的逻辑顺序是通过引用链接次序实现的 那物理存储结构连续是什么意思&#xff1f; 之前我们讲过顺序表&#xff0c;顺序表的底层是数组&#xff0c;如下…...

【高并发内存池】从零到一的项目之高并发内存池整体框架设计及thread cache设计

个人主页 &#xff1a; zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 前言1. 高并发内存池整体框架设计2. 高并发内存池--thread cache2.1 定长内存池的问题2.2 整体框架2.3 自由链表2.4 thread cache哈希桶的对齐规则2.5…...

电气动调节单座V型球阀带阀杆节流套沟槽孔板的作用-耀圣

电气动调节单座V球阀杆节流套是阀门中的一个重要组件&#xff0c;主要用于调节和控制流体介质的流量、压力或流速&#xff0c;同时兼具导向、密封和稳定阀杆运动降低流速减少冲刷的作用。以下是其具体功能和应用场景的详细说明&#xff1a; 1. 节流与流量控制** 作用原理**&am…...

vscode使用笔记

文章目录 安装快捷键 vscode是前端开发的一款利器。 安装 快捷键 ctrlp # 查找文件(和idea的双击shift不一样) ctrlshiftf # 搜索内容...

基于 SpringAI 整合 DeepSeek 模型实现 AI 聊天对话

目录 1、Ollama 的下载配置 与 DeepSeek 的本地部署流程 1.1 下载安装 Ollama 1.2 搜索模型并进行本地部署 2、基于 SpringAI 调用 Ollama 模型 2.1 基于OpenAI 的接口规范&#xff08;其他模型基本遵循&#xff09; 2.2 在 IDEA 中进行创建 SpringAI 项目并调用 DS 模型 3、基…...

Idea创建项目的搭建方式

目录 一、普通Java项目 二、普通JavaWeb项目 三、maven的JavaWeb项目 四、maven的Java项目 一、普通Java项目 1. 点击 Create New Project 2. 选择Java项目&#xff0c;选择JDK&#xff0c;点击Next 3. 输入项目名称&#xff08;驼峰式命名法&#xff09;&#xff0c;可选…...

【MATLAB第115期】基于MATLAB的多元时间序列的ARIMAX的预测模型

【MATLAB第115期】基于MATLAB的多元时间序列的ARIMAX的预测模型 ‌一、简介 ARIMAX‌&#xff08;Autoregressive Integrated Moving Average with eXogenous inputs&#xff09;模型是一种结合自回归&#xff08;AR&#xff09;、差分&#xff08;I&#xff09;、移动平均&a…...

【以太网安全】——防护高级特性配置总结

目前网络中以太网技术的应用非常广泛、然后、各种网络攻击的纯在&#xff08;例如针对ARP DHCP 等攻击&#xff09;不仅造成了网络合法用户无法正常访问网络资源、而且对网络信息安全构成严重威胁、以下配置是对局域网安全配置命令做详解 主要的安全威胁 MAC攻击:泛洪、欺骗 …...

微信小程序 van-dropdown-menu

点击其他按钮&#xff0c;关闭van-dropdown-menu下拉框 DropdownMenu 引入页面使用index.wxmlindex.scssindex.ts(重点)index.ts(全部) DropdownMenu 引入 在app.json或index.json中引入组件 "usingComponents": {"van-dropdown-menu": "vant/weapp…...