Opencv图像处理技术(图像轮廓)

news2024/11/15 17:15:49

1图像轮廓概念:

图像轮廓是指图像中连续的像素边界,这些边界通常代表了图像中的物体或者物体的边缘。在数字图像处理中,轮廓是由相同像素值组成的曲线,它们连接相同的颜色或灰度值,并且具有连续性。轮廓可以用来描述和分析图像中的形状和结构,是许多计算机视觉任务的基础,如目标检测、形状识别、图像分割等

任务2 查找与绘制图像轮廓

2.1查找图像轮廓

在 OpenCV 中,查找图像轮廓的函数是 `cv2.findContours()`,其语法如下:

contours, hierarchy = cv2.findContours(image, mode, method[, contours[, hierarchy[, offset]]])


各参数的意义如下:

  • - image:输入的二值图像,通常是经过阈值化或边缘检测后的图像。
  • - mode:轮廓检索模式,指定轮廓的检索方式。常用的模式包括:
  •   - cv2.RETR_EXTERNAL:仅检测外部轮廓。
  •   - cv2.RETR_LIST:检测所有轮廓,不建立轮廓间的层级关系。
  •   - cv2.RETR_CCOMP:检测所有轮廓,建立两级轮廓结构。
  •   - cv2.RETR_TREE:检测所有轮廓,建立完整的轮廓层级结构。
  • - `method`:轮廓逼近方法,指定轮廓的逼近方式。常用的方法包括:
  •   - `cv2.CHAIN_APPROX_NONE`:保存所有的轮廓点。
  •   - `cv2.CHAIN_APPROX_SIMPLE`:压缩水平、垂直和对角方向的像素,只保留端点。
  •   - `cv2.CHAIN_APPROX_TC89_L1`:使用 Teh-Chin 链逼近算法之一。
  •   - `cv2.CHAIN_APPROX_TC89_KCOS`:使用 Teh-Chin 链逼近算法之二。
函数返回两个值:
- contours:检测到的轮廓,每个轮廓是一个点集的列表。
- hierarchy:可选输出的层级信息,用于描述轮廓之间的层级关系。
2.2绘制图像轮廓

在 OpenCV 中,绘制图像轮廓的函数是 `cv2.drawContours()`,其语法如下:

`
 

image = cv2.drawContours(image, contours, contourIdx, color, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]])

其中各参数的意义如下:

  • - `image`:要绘制轮廓的输入图像。
  • - `contours`:要绘制的轮廓列表,通常是通过 `cv2.findContours()` 函数得到的轮廓。
  • - `contourIdx`:要绘制的轮廓的索引,如果为负数,则绘制所有轮廓。
  • - `color`:轮廓的颜色,可以是一个单通道的灰度值(0-255),或者是一个包含三个通道的颜色值 (B, G, R)。
  • - `thickness`:轮廓的线条粗细,如果为负数或 `cv2.FILLED`,则填充轮廓内部。
  • - `lineType`:轮廓线条的类型,可选参数,默认为 `cv2.LINE_8`。
  • - `hierarchy`:可选参数,用于描述轮廓之间的层级关系。
  • - `maxLevel`:可选参数,绘制轮廓的最大层级。
  • - `offset`:可选参数,指定轮廓偏移量。
任务演练-实现图像轮廓的绘制与查找

代码1 绘制图像外轮廓:

#8.1
import cv2
import numpy as np
img= cv2.imread("C:/Users/win11/opencv/sucai8/shape.jpg")
cv2.imshow("img",img)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,binary=cv2.threshold(gray,180,255,0)
contours,hierarchy=cv2.findContours(binary,cv2.RETR_EXTERNAL,\
                                   cv2.CHAIN_APPROX_NONE)
dst=cv2.drawContours(img,contours,-1,(0,255,255),thickness=5)
cv2.imshow("contours",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:可以看出实现的图在原图上多了一层黄色的外轮廓

代码2绘制图像的全部轮廓

#8-2
import cv2
import numpy as np
img= cv2.imread("C:/Users/win11/opencv/sucai8/shape.jpg")
cv2.imshow("img",img)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,binary=cv2.threshold(gray,180,255,0)
contours,hierarchy=cv2.findContours(binary,cv2.RETR_TREE,\
                                   cv2.CHAIN_APPROX_NONE)
dst=cv2.drawContours(img,contours,-1,(0,255,255),thickness=5)
cv2.imshow("binary",binary)
cv2.imshow("contours",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:所有的图像外面都有一层轮廓

任务3:计算轮廓长度与面积

在OpenCV中,你可以使用`cv2.arcLength()`函数计算轮廓的长度,以及使用`cv2.contourArea()`函数计算轮廓的面积。这两个函数的语法如下:

length = cv2.arcLength(curve, closed)
area = cv2.contourArea(contour)

其中各参数的意义如下:

  • - `curve`:要计算长度的曲线,通常是轮廓中的点集。
  • - `closed`:布尔值,指示曲线是否封闭。对于轮廓来说,通常是True,表示闭合曲线。
  • - `contour`:要计算面积的轮廓。

任务演练:使用cv2.arcLength()函数计算轮廓长度,返回单位为像素点个数

代码:

import cv2
img= cv2.imread("C:/Users/win11/opencv/sucai8/shape.jpg")
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,binary=cv2.threshold(gray,220,255,cv2.THRESH_BINARY)
contours,hierarchy=cv2.findContours(binary,cv2.RETR_TREE,\
                                   cv2.CHAIN_APPROX_NONE)
n=len(contours)
contoursImg=[]
for i in range(n):
    length=cv2.arcLength(contours[i],True)
    print(f"轮廓{i+1}的长度:\n{length}")

结果如图:

 2使用cv2.contoursArea()函数计算轮廓面积 ,返回单位为像素点个数

代码:

import cv2
img= cv2.imread("C:/Users/win11/opencv/sucai8/shape.jpg")
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,binary=cv2.threshold(gray,220,255,cv2.THRESH_BINARY)
contours,hierarchy=cv2.findContours(binary,cv2.RETR_TREE,\
                                   cv2.CHAIN_APPROX_NONE)
n=len(contours)
contoursImg=[]
for i in range(n):
    area=cv2.contourArea(contours[i])
    print(f"轮廓{i}的面积:\n{area}")

任务3:实现形状匹配

在 OpenCV 中,你可以使用 `cv2.matchShapes()` 函数来实现形状匹配。这个函数可以用来比较两个形状或轮廓的相似度。它的语法如下:


 

match_value = cv2.matchShapes(contour1, contour2, method, parameter)

其中各参数的意义如下:

  • - `contour1`:第一个输入的轮廓。
  • - `contour2`:第二个输入的轮廓。
  • - `method`:形状匹配的方法,是一个比较轮廓相似度的度量标准。常用的方法包括:
  •   - `cv2.CONTOURS_MATCH_I1`:Hu 矩的相关性,具有较高的鲁棒性。
  •   - `cv2.CONTOURS_MATCH_I2`:Hu 矩的其他相关性度量。
  •   - `cv2.CONTOURS_MATCH_I3`:基于物理距离的相似性度量。
  • - `parameter`:方法参数,通常为0。

函数返回形状匹配的数值,值越小表示两个形状越相似。

任务演练——形状匹配

代码:

import cv2

o1 = cv2.imread("C:/Users/win11/opencv/sucai8/m1.png")
o2 = cv2.imread("C:/Users/win11/opencv/sucai8/m2.png")

gray1 = cv2.cvtColor(o1, cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(o2, cv2.COLOR_BGR2GRAY)

ret, binary1 = cv2.threshold(gray1, 127, 255, cv2.THRESH_BINARY)
ret, binary2 = cv2.threshold(gray2, 127, 255, cv2.THRESH_BINARY)

contours1, hierarchy = cv2.findContours(binary1, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contours2, hierarchy = cv2.findContours(binary2, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

cent1 = contours1[0]
cent2 = contours2[0]

ret0 = cv2.matchShapes(cent1, cent1, 1, 0.0)
ret1 = cv2.matchShapes(cent1, cent2, 1, 0.0)

print("相同图像的matchShape=", ret0)
print("相似图像的matchShape=", ret1)

m1和m2的图像如下:

 结果如下:

相同图像的matchShape= 0.0
相似图像的matchShape= 0.28749410662718267

任务4轮廓的几何形状拟合

4.1

在 OpenCV 中,你可以使用 cv2.boundingRect() 函数来获取轮廓的矩形包围框。这个函数可以用来获取包围轮廓的最小矩形,即矩形包围框的左上角坐标以及宽度和高度。它的语法如下:

x, y, w, h = cv2.boundingRect(points)

其中各参数的意义如下:

  • points:轮廓中的点集。
  • x, y:矩形的左上角坐标。
  • w:矩形的宽度。
  • h:矩形的高度。

函数返回矩形包围框的左上角坐标以及宽度和高度。

4.2

在 OpenCV 中,你可以使用 cv2.minAreaRect() 函数来获取轮廓的最小外接矩形框。这个函数可以用来获取包围轮廓的最小旋转矩形,即旋转矩形框的中心点坐标、宽度、高度以及旋转角度。它的语法如下:

rect = cv2.minAreaRect(points)

其中各参数的意义如下:

  • points:轮廓中的点集。
  • rect:返回的最小外接矩形对象,包含矩形的中心点坐标、宽度、高度以及旋转角度。

函数返回的是一个 RotatedRect 对象,你可以通过该对象的方法来获取矩形的信息

 

4.3

OpenCV 中,你可以使用 cv2.minEnclosingCircle() 函数来获取轮廓的最小包围圆。这个函数可以用来获取包围轮廓的最小圆,即圆心坐标和半径。它的语法如下:

(center, radius) = cv2.minEnclosingCircle(points)

其中各参数的意义如下:

  • points:轮廓中的点集。
  • center:返回的圆心坐标,通常是一个二元元组 (x, y)
  • radius:返回的圆的半径。

函数返回的是一个二元元组,包含圆心坐标和半径信息。

任务演练——几何形状拟合实践

1使用矩形包围框进行拟合

代码:

import cv2

img = cv2.imread("C:/Users/win11/opencv/sucai8/shape.jpg")
cv2.imshow("original", img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

x, y, w, h = cv2.boundingRect(contours[0])
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 0), 2)

cv2.imshow("result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:

2使用最小包围矩形框进行拟合

代码:

import cv2
import numpy as  np
img = cv2.imread("C:/Users/win11/opencv/sucai8/shape.jpg")
cv2.imshow("original", img)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
retval=cv2.minAreaRect(contours[1])
points=cv2.boxPoints(retval)
points=np.int64(points)
cv2.drawContours(img,[points],0,(0,0,0),2)

cv2.imshow("result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:

3使用最小包围圆形进行拟合

代码:

import cv2
import numpy as np

# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai8/shape.jpg")
cv2.imshow("Original", img)

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化处理
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 寻找轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

# 获取第二个轮廓的最小外接圆
(x, y), radius = cv2.minEnclosingCircle(contours[1])
center = (int(x), int(y))
radius = int(radius)

# 绘制最小外接圆
cv2.circle(img, center, radius, (0, 0, 0), 2)

# 显示结果图像
cv2.imshow("Result", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:

任务5——绘制凸包

凸包是指包围一组点集的最小凸多边形。在计算机视觉和图形学中,凸包常用于图像处理中的形状分析和轮廓检测。通常,通过计算轮廓中的凸包可以得到目标物体的外形信息,这对于识别和分析图像中的对象非常有用。

在OpenCV中,可以使用 cv2.convexHull() 函数来计算凸包并绘制。下面是该函数的语法和参数:

hull = cv2.convexHull(points[, hull[, clockwise[, returnPoints]]])

  • points: 输入的点集,通常是轮廓的点集。
  • hull: 可选参数,输出的凸包点集。
  • clockwise: 可选参数,指定是否输出凸包点按照顺时针排序,默认为 False
  • returnPoints: 可选参数,指定输出是点集的索引还是实际坐标,默认为 True,表示输出实际坐标。

任务演练——获取简单图像的凸包

代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("C:/Users/win11/opencv/sucai8/contours2.png")
cv2.imshow("original", img)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
hull=cv2.convexHull(contours[0])
cv2.polylines(img,[hull],True,(255,0,0),2)
cv2.imshow("hull", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.imshow(img)

结果如下:

任务6——轮廓分类

在 OpenCV 中,有一些函数和参数可以用于轮廓分类、计算宽高比和占空比:

  1. 轮廓分类(Contour Hierarchy)

    • cv2.findContours() 函数中的 hierarchy 参数用于指定轮廓的层级信息。常用的层级类型包括 cv2.RETR_LISTcv2.RETR_EXTERNALcv2.RETR_TREE 等,它们会影响轮廓的提取和排序方式。
  2. 宽高比计算

    • 计算轮廓外接矩形的宽高比可以通过计算矩形的宽度除以高度来实现。在代码中,可以使用以下公式来计算宽高比:
      aspect_ratio = float(w) / h
      
  3. 占空比计算

    • 占空比(Aspect Ratio)是指对象的宽度与高度之比。在轮廓分析中,可以将外接矩形的宽度和高度比较来计算占空比。在代码中,可以使用以下公式来计算:
      aspect_ratio = float(w) / h

任务演练——轮廓分类  使用特征值对轮廓进行分类 将长扁圆与扁扁圆进行分类 并对其更换yans

代码:

import cv2  # 导入OpenCV库

import numpy as np  # 导入NumPy库用于数组操作

# 读取图像
img = cv2.imread("C:/Users/win11/opencv/sucai8/face.png")
cv2.imshow("original", img)  # 显示原始图像


gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 转换为灰度图像
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)#对灰度图像进行二值化处理
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)#查找图像中的轮廓。

h, w, c = img.shape  # 获取图像的高度、宽度和通道数
mask = np.zeros((h, w, c), np.uint8)  # 创建与原始图像相同大小的全零图像作为掩码

# 遍历轮廓
for cnt in contours:
    # 获取边界框
    x, y, w, h = cv2.boundingRect(cnt)#获取当前轮廓的边界框
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 255, 255), 3)  # 绘制边界框 在原始图像上绘制当前轮廓的全白边界框。
    cv2.imshow("temp", img)  # 显示临时结果图像
    
    # 计算椭圆的宽高比
    AR = float(w) / h
    if AR < 1:
        # 绘制红色轮廓(长的椭圆)
        cv2.drawContours(mask, [cnt], -1, (0, 0, 255), -1)  # 在填充 掩码mask上绘制轮廓填充
        print(AR, "是长的椭圆")
    else:
        # 绘制红色轮廓(扁的椭圆)
        cv2.drawContours(mask, [cnt], -1, (0, 255, 255), -1)  # 在掩码上绘制轮廓
        print(AR, "是扁的椭圆")

# 显示最终结果
cv2.imshow("result", mask)
cv2.waitKey(0)  # 等待按键按下
cv2.destroyAllWindows()  # 关闭所有窗口

 结果如下:

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

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

相关文章

【几何】输入0-360度任意的角度,求上面直线与椭圆相切点的坐标计算公式

输入0-360度任意的角度,求上面直线与椭圆相切点的坐标计算公式 使用积分计算 使用到的公式有椭圆公式: x 2 a 2 + y 2 b 2 = 1 \frac{x^2}{a^2}+\frac{y^2}{b^2} = 1 a2x2​+b2y2​=1 平面旋转公式 X r = cos ⁡ θ ∗ ( X s − X O ) − sin ⁡ θ ∗ ( Y s − Y O ) + X …

文心智能体平台:快来创建你的Java学习小助理,全方位辅助学习

文章目录 一、文心智能体平台1.1平台介绍1.2智能体介绍 二、智能体创建三、体验与总结 一、文心智能体平台 文心智能体平台是百度推出的基于文心大模型的智能体&#xff08;Agent&#xff09;平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类…

Three.js 中的场景与相机基础

Three.js 中的场景与相机基础 一、场景&#xff08;Scene&#xff09; 在 Three.js 中&#xff0c;场景是所有 3D 对象存在和交互的容器。艾斯视觉作为行业ui设计与前端开发服务商很高兴能在这里与你共同探讨&#xff1a;它就像是一个虚拟的 3D 空间&#xff0c;我们可以在其中…

[vue3后台管理一]vue3下载安装及环境配置教程

[vue3后台管理二]vue3下载安装element plus 一、vue3下载安装element plus cnpm install element plus二&#xff1a;修改main.js import { createApp } from "vue"; import App from "./App.vue"; import ElementPlus from "element-plus"; …

好用的国产大文件传输软件有哪些,快来看看吧

在这个数字化飞速发展的时代&#xff0c;我们每天都在与各种文件打交道&#xff0c;从简单的文档到庞大的视频素材&#xff0c;文件的体积越来越大&#xff0c;传统的文件传输方式逐渐显得力不从心。面对这个挑战&#xff0c;大文件传输软件应运而生&#xff0c;它们不仅解决了…

Khoj:开源个人AI助手能连接你的在线和本地文档充当你的第二大脑

项目简介 Khoj是一个开源的、个人化的AI助手&#xff0c;旨在充当你的第二大脑。它能够帮助你回答任何问题&#xff0c;不论这些问题是在线上的还是在你自己的笔记中。Khoi 支持使用在线AI模型(例如 GPT-4)或私有、本地的语言模型(例如 Llama3)。你可以选择自托管 Khoj&#x…

自定义tabbar

一: 在这里配置true,则会找根目录下的文件,作为路由渲染到每个tabbar页面下.原本是默认情况,自定义内部路由,放到每个tabbar页面下. 二: 上面做到了,每个tabbar页面的底部都是这个组件. 三: Tabbar 标签栏 - Vant Weapp (youzan.github.io) 使用组件库,配置组件内容. <va…

金融反欺诈指南:车险欺诈为何如此猖獗?

目录 车险欺诈猖獗的原因 车险欺诈的识别难点 多重合作打击车险欺诈 保险企业需要提升反欺诈能力 监管部门需要加强协同合作 青岛市人民检察院在其官方微信公众号上发布的梁某保险诈骗案显示&#xff0c;2020 年以来&#xff0c;某汽修厂负责人梁某、某汽车服务公司负责人孙某&…

pyqt Qtreeview分层控件

pyqt Qtreeview分层控件 介绍效果代码 介绍 QTreeView 是 PyQt中的一个控件&#xff0c;它用于展示分层数据&#xff0c;如目录结构、文件系统等。QTreeView 通常与模型&#xff08;如 QStandardItemModel、QFileSystemModel 或自定义模型&#xff09;一起使用&#xff0c;以管…

2024 GIAC 全球互联网架构大会:拓数派向量数据库 PieCloudVector 架构设计与案例实践

5月24-25日&#xff0c;msup 和高可用架构联合举办了第11届 GIAC 全球互联网架构大会。会议聚焦“共话AI技术的最新进展、架构实践和未来趋势”主题&#xff0c;邀请了 100 余位行业内的领军人物和革新者&#xff0c;分享”Agent/RAG 技术、云原生、基座大模型“等多个热门技术…

07 FreeRTOS 事件组(event group)

1、事件组概念 1.1 基本概念 使用事件组可以等待某个事件、若干事件中的任意一个事件、若干事件中的所有事件&#xff0c;但是不能指定若干事件中的某些事件。 事件组可以简单地认为就是一个整数&#xff1a;这个整数的每一位表示一个事件&#xff1b;每一位事件的含义由程序员…

真实测评:9款电脑加密软件最新排名

2024年已经过半&#xff0c;电脑加密软件市场发生了很多变化&#xff0c;根据资料汇总&#xff0c;一些电脑加密软件排名也发生了变化&#xff0c;下面是最近的排名。 1、安企神&#xff1a; 可以试试7天的免费试用&#xff0c;用过之后就回不去了 试用版https://work.weix…

【408真题】2009-26

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

29-ESP32-S3-WIFI_Driver-00 STA模式扫描全部 AP

ESP32-S3 WIFI_Driver 引言 ESP32-S3是一款集成了Wi-Fi和蓝牙功能的芯片。关于WIFI的部分&#xff0c;其实内容比我想象的要多得多。所以通常来说&#xff0c;如果你想要编写自己的Wi-Fi应用程序&#xff0c;最快捷的方法就是先找一个类似的示例应用&#xff0c;然后将它的相…

QT——QSlider实现,QT滑动控件的使用

目录 简介滑动块调节两种方法滑动条触发信号量理想滑动块运用&#xff08;参考&#xff09; 简介 QT中滑动条的控件叫QSlider&#xff0c;继承自QAbstractSlider类。 主要用途是通过滑块的滑动的方式在一定范围内调节某个值。根据调节的后得到的结果去执行一些处理&#xff0c…

[猫头虎分享21天微信小程序基础入门教程] 第20天:小程序的多媒体功能与图像处理

[猫头虎分享21天微信小程序基础入门教程] 第20天&#xff1a;小程序的多媒体功能与图像处理 第20天&#xff1a;小程序的多媒体功能与图像处理 &#x1f3a8; 自我介绍 大家好&#xff0c;我是猫头虎&#xff0c;一名全栈软件工程师。今天我们继续微信小程序的学习&#xff…

Linux 驱动设备匹配过程

一、Linux 驱动-总线-设备模型 1、驱动分层 Linux内核需要兼容多个平台&#xff0c;不同平台的寄存器设计不同导致操作方法不同&#xff0c;故内核提出分层思想&#xff0c;抽象出与硬件无关的软件层作为核心层来管理下层驱动&#xff0c;各厂商根据自己的硬件编写驱动…

Llama改进之——RoPE旋转位置编码

引言 旋转位置编码(Rotary Position Embedding, RoPE)将绝对相对位置依赖纳入自注意力机制中&#xff0c;以增强Transformer架构的性能。目前很火的大模型LLaMA、QWen等都应用了旋转位置编码。 之前在[论文笔记]ROFORMER中对旋转位置编码的原始论文进行了解析&#xff0c;重点…

ELT 同步 MySQL 到 Doris

如何基于 Flink CDC 快速构建 MySQL 到 Doris 的 Streaming ELT 作业&#xff0c;包含整库同步、表结构变更同步和分库分表同步的功能。 本教程的演示都将在 Flink CDC CLI 中进行&#xff0c;无需一行 Java/Scala 代码&#xff0c;也无需安装 IDE。 准备阶段 # 准备一台已经…

如何去除input框在复制内容时自动填充的背景颜色

今天在项目开放时遇到了一个问题在输入复制内容时会有一个自带的背景颜色无法去除&#xff1b; 效果图&#xff1a; 修改的核心代码&#xff1a; /* 修改自动填充时的背景颜色 */ input:-internal-autofill-previewed, input:-internal-autofill-selected {-webkit-text-fil…