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

OpenCV-Python Tutorial : A Candy from Official Main Page(持续更新)

OpenCV-Python 是计算机视觉领域最流行的开源库之一,它结合了 OpenCV (Open Source Computer Vision Library) 的 C++ 高性能实现和 Python 的简洁易用特性,为开发者提供了强大的图像和视频处理能力。具有以下优势:

典型应用领域

  • 图像/视频处理与分析

  • 物体检测与识别

  • 人脸识别与生物特征识别

  • 增强现实(AR)

  • 自动驾驶视觉系统

  • 医学影像分析

  • 工业质检

丰富的算法库

  • 图像处理:滤波、几何变换、色彩空间转换
  • 特征提取:SIFT、SURF、ORB 等
  • 机器学习:SVM、KNN、决策树等
  • 深度学习:支持 TensorFlow、PyTorch 模型

丰富的算法库,比如:

  1. 人脸识别系统

    • 使用 Haar 级联或 DNN 进行人脸检测

    • LBPH 或 FaceNet 进行识别

  2. 车牌识别

    • 边缘检测定位车牌

    • OCR 识别字符

  3. 实时滤镜应用

    • 美颜滤镜

    • 风格化转换

  4. 运动追踪

    • 光流法追踪

    • 背景减除

一、 Gui Features in OpenCV

1.1加载图片:cv2.imread()

cv2.imread() 是 OpenCV 中用于从文件加载图像的核心函数,它将图像文件读取为 NumPy 数组,便于后续处理和分析。所以,在opencv-python中,图片的实际上是一个np数组。

image = cv2.imread(filename, flags=cv2.IMREAD_COLOR)
参数说明filename (字符串):图像文件的路径(支持格式:JPEG、PNG、BMP、TIFF等)flags (可选):读取模式标志,常用有以下几种:cv2.IMREAD_COLOR (默认):加载3通道BGR彩色图像(忽略透明度)cv2.IMREAD_GRAYSCALE:加载为单通道灰度图像cv2.IMREAD_UNCHANGED:按原样加载,包括alpha通道(4通道BGRA)cv2.IMREAD_ANYDEPTH:保留原始位深度cv2.IMREAD_REDUCED_COLOR_2/4/8:按比例缩小尺寸加载
返回值成功时返回 numpy.ndarray 多维数组失败时返回 None(文件不存在/格式不支持等)

demo

从路径中加载一张图片,并且从窗口中打开,最后保存到其他地方

import cv2
import sysimg = cv2.imread('/media/lee/软件/colmap_exp/instant/result/zj/images/VID_20250325_150846/0.0.png')print(type(img),img)if img is None:sys.exit("Error: Could not read the image.")cv2.imshow("display window",img)cv2.waitKey(0)
# cv2.waitKey(0) 中的 0 表示无限等待,即程序会一直暂停,直到用户按下任意键。
# 如果传入一个正整数(例如 cv2.waitKey(1000)),则表示等待指定的毫秒数(1000 毫秒 = 1 秒),之后程序会继续执行,无论用户是否按下键。cv2.destroyWindow("display window")cv2.imwrite('open-cv/read_image_output.png', img)
exit()

放大以后,可以看到各个像素的RGB数值:

print图片:

1.2加载视频:cv2.VideoCapture()

cv2.VideoCapture() 是 OpenCV(开源计算机视觉库)中用于从 摄像头视频文件网络流 捕获视频的函数。它是视频处理和计算机视觉应用的基础工具。

cv2.VideoCapture(source, [apiPreference])source(输入源):摄像头:0(默认摄像头)、1(第二个摄像头)等。视频文件:文件路径(如 "video.mp4")。网络/IP 摄像头:RTSP/HTTP 流地址(如 "rtsp://192.168.1.1/live")。apiPreference(可选):指定视频捕获的后端(如 cv2.CAP_DSHOW 用于 Windows 摄像头)。

demo1:加载本地视频,转为灰度图

import numpy as np
import cv2 as cvcap = cv.VideoCapture('/media/lee/软件/colmap_exp/instant/result/zj/video/VID_20250325_151144.mp4')while cap.isOpened():ret,frame = cap.read()# if frame is read correctly ret is Trueif not ret:print("Can't receive frame (stream end?). Exiting ...")breakgray = cv.cvtColor(frame,cv.COLOR_BGR2GRAY)cv.imshow('frame',gray)if cv.waitKey(1) == ord('q'):breakcap.release()#Closes video file or capturing device.
cv.destroyAllWindows()#Closes all OpenCV windows.

demo2:摄像头录像,保存

import cv2cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 编码格式
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))  # 输出文件while cap.isOpened():ret, frame = cap.read()if not ret:breakout.write(frame)  # 写入帧cv2.imshow("录制中...", frame)if cv2.waitKey(1) == ord('q'):breakcap.release()
out.release()  # 释放写入器
cv2.destroyAllWindows()

1.3draw different geometric shapes

包括多种形状

demo:使用直线,矩形,圆,椭圆,折线在纯黑图片上画出形状

import numpy as np
import cv2 as cv# create a black image
img = np.zeros((512,512,3),np.int8)
# cv.imwrite('open-cv/gui_features/draw_image.png',img)# draw a diagonal blue line with thickness of 5 px 
cv.line(img,(0,0),(511,511),(255,0,0),5)
# cv2.line(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)cv.rectangle(img,(394,0),(300,129),(0,255,0),3)
# cv2.rectangle(img, pt1, pt2, color, thickness=1, lineType=cv2.LINE_8, shift=0)cv.circle(img,(347,363),(80),(0,0,255),-1)
# cv2.circle(img, center, radius, color, thickness=1, lineType=cv2.LINE_8, shift=0)cv.ellipse(img,(256,256),(100,50),0,0,360,(255,0,0),-1)
# cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=1, lineType=cv2.LINE_8, shift=0)pts = np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))
# cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])
# isClosed:布尔值,指示多边形是否闭合cv.imshow("Line", img)
cv.waitKey(0)
cv.destroyAllWindows()

二、basic operation

2.1修改像素

图片在opencv中是一个array,所以修改图片等同于修改这个array

demo:修改像素

import cv2 as cv
import numpy as npimg = cv.imread('open-cv/core_operation/load_image_output.png')
assert img is not None, "file could not be read, check with os.path.exists()"px = img[100,100]
print(px)blue = img[100,100,0]
print(blue)# modify the pixel values 
modify_pixel = np.ones((800,800,3))
img[:800,:800:] = modify_pixel# images property
print(f"image shape is {img.shape}, image size is {img.size}, and image type is {img.dtype}")cv.imshow("modify the pixel values",img)
cv.waitKey(0)
cv.destroyWindow("modify the pixel values")

2.2ROI

ROI 技术就是只处理图像中关键的局部区域,而非整张图像,可以高效地实现局部图像处理,是计算机视觉中的基础技能!

demo:把感兴趣的区域复制到其他地方

 ball = img[280:340, 330:390]img[273:333, 100:160] = ball

2.3分离以及合并通道:cv.split、cv.merge

有时需要分别处理图像的 B、G、R 通道。在这种情况下,要将 BGR 图像拆分为多个单独的通道。在其他情况下,可能需要合并这些单独的通道以创建 BGR 图像

demo:将图像的b通道数值减半,然后重新合成

import cv2 as cv
import numpy as npimg = cv.imread('open-cv/core_operation/load_image_output.png')
assert img is not None, "file could not be read, check with os.path.exists()"
# breakpoint()# 使用自带的方法
b,g,r = cv.split(img)
img = cv.merge((b,g,r))# or使用numpy,第三维是通道
b = img[:,:,0]
b = b // 2img = cv.merge((b,g,r))
# img[:,:,2] = 0cv.imshow("modify the channel",img)
cv.waitKey(0)
cv.destroyWindow("modify the channel")

结果:

2.4扩展边界:cv2.copyMakeBorder()

cv2.copyMakeBorder() 是 OpenCV 中用于给图像添加边框(填充)的函数,常用于图像处理中的边缘扩展、卷积操作前的边界处理等场景。这个功能在做图像卷积时非常有用:

cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]])
参数	说明
src	输入图像
top	顶部边框宽度(像素数)
bottom	底部边框宽度
left	左侧边框宽度
right	右侧边框宽度
borderType	边框类型(见下方说明)
dst	输出图像(可选)
value	当 borderType 为 BORDER_CONSTANT 时的边框颜色值边框类型(borderType)
类型	说明
cv2.BORDER_CONSTANT	添加固定颜色的边框(需指定 value)
cv2.BORDER_REPLICATE	复制最边缘像素值:aaaaaa	abcdefgh	hhhhhhh
cv2.BORDER_REFLECT	镜像反射:fedcba	abcdefgh	hgfedcb
cv2.BORDER_REFLECT_101	镜像反射(不含边缘):gfedcb	abcdefgh	gfedcba
cv2.BORDER_WRAP	平铺重复:cdefgh	abcdefgh	abcdefg

demo:在图片中分别添加上述边缘

import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltimg = cv.imread('open-cv/core_operation/load_image_output.png')
assert img is not None, "file could not be read, check with os.path.exists()"
img = cv.resize(img,(540,960))
# cv.imshow("",img)
# cv.waitKey(0)
# cv.destroyWindow("")
cv.imwrite('open-cv/core_operation/image1.png',img)img = cv.cvtColor(img,cv.COLOR_BGR2BGRA)# 复制最边缘像素值
replicate = cv.copyMakeBorder(img,200,200,200,200,cv.BORDER_REPLICATE)
# 镜像反射
reflect = cv.copyMakeBorder(img,200,200,200,200,cv.BORDER_REFLECT)
# 镜像反射(不含边缘)
reflect101 = cv.copyMakeBorder(img,200,200,200,200,cv.BORDER_REFLECT_101)
# 平铺重复
wrap = cv.copyMakeBorder(img,200,200,200,200,cv.BORDER_WRAP)
# 添加固定颜色的边框
constant = cv.copyMakeBorder(img,200,200,200,200,cv.BORDER_CONSTANT,value=[255,0,0])# 画图
plt.figure(figsize=(12,8))
plt.subplot(231),plt.imshow(img),plt.title('origin', fontsize=100)
plt.subplot(232),plt.imshow(replicate),plt.title('replicate', fontsize=100)
plt.subplot(233),plt.imshow(reflect),plt.title('reflect', fontsize=100)
plt.subplot(234),plt.imshow(reflect101),plt.title('reflect101', fontsize=100)
plt.subplot(235),plt.imshow(wrap),plt.title('wrap', fontsize=100)
plt.subplot(236),plt.imshow(constant),plt.title('constant', fontsize=100)# 调整子图之间的间距
plt.subplots_adjust(left=0.1,    # 左边距right=0.9,   # 右边距bottom=0.1,  # 下边距top=0.9,     # 上边距wspace=0.1,  # 水平间距hspace=0.2   # 垂直间距
)
plt.show()

结果:

2.5图像的blend-cv2.addWeighted()、cv.add()

cv2.add() 是 OpenCV 中用于执行图像或矩阵加法的基本函数,它可以将两幅图像或矩阵进行逐元素的加法运算。

cv2.add(src1, src2[, dst[, mask[, dtype]]])
参数	说明
src1	第一个输入数组(图像/矩阵)
src2	第二个输入数组(与src1大小和类型相同)
dst	输出数组(可选)
mask	可选的操作掩码,8位单通道数组
dtype	输出数组的可选深度

cv2.addWeighted() 是 OpenCV 中用于执行图像加权融合(线性混合)的函数,它可以将两幅图像按照指定的权重进行组合,生成新的图像。这个函数在图像混合、透明度叠加、图像融合等场景中非常有用。

cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])
参数	说明
src1	第一个输入图像(矩阵)
alpha	第一个图像的权重(0-1之间的浮点数)
src2	第二个输入图像(必须与src1大小和类型相同)
beta	第二个图像的权重(0-1之间的浮点数)
gamma	标量值,添加到加权和中
dst	输出图像(可选)
dtype	输出数组的可选深度函数执行的计算公式为:
dst = src1 × alpha + src2 × beta + gamma
gamma是一个亮度调整值,正数使图像变亮,负数使图像变暗

demo:把两张图片加起来

import cv2 as cv
import numpy as np# img = cv.imread("open-cv/core_operation/19.58605149080521.png")
# img = cv.resize(img,(540,960))
# cv.imwrite('open-cv/core_operation/image2.png',img)
img1 = cv.imread("open-cv/core_operation/image1.png")
img2 = cv.imread("open-cv/core_operation/image2.png")
print(img1.shape,img2.shape)x = np.uint8([255])
y = np.uint8([10])print(cv.add(x,y),x+y)blended_img = cv.addWeighted(img1,0.7,img2,0.3,0)
cv.imshow("cv.add", cv.add(img1,img2))
cv.imshow("blend", blended_img)
cv.waitKey(0)
cv.destroyAllWindows

2.6mask的使用-cv.cvtCOLOR、cv.threshold、cv.bitwise

cv2.cvtColor() 是 OpenCV 中用于图像颜色空间转换的核心函数,它能够将图像从一种颜色空间转换为另一种颜色空间.

cv2.cvtColor(src, code[, dst[, dstCn]])
参数	说明
src	输入图像(8位无符号、16位无符号或单精度浮点型)
code	颜色空间转换代码(如 cv2.COLOR_BGR2GRAY)
dst	输出图像(可选)
dstCn	输出图像的通道数(0表示自动确定)

cv2.threshold()是OpenCV中用于图像阈值处理的核心函数,它能将灰度图像转换为二值图像。

retval, dst = cv2.threshold(src, thresh, maxval, type)src:输入图像(必须为8位或32位浮点型单通道图像)thresh:阈值(0-255之间的值)maxval:当像素值超过阈值时赋予的新值type:阈值化类型,有以下几种:cv2.THRESH_BINARY:二进制阈值化cv2.THRESH_BINARY_INV:反二进制阈值化cv2.THRESH_TRUNC:截断阈值化cv2.THRESH_TOZERO:阈值化为0cv2.THRESH_TOZERO_INV:反阈值化为0cv2.THRESH_OTSU:大津算法(自动确定阈值)cv2.THRESH_TRIANGLE:三角算法(自动确定阈值)

cv2.bitwise_not() 是 OpenCV 中用于执行按位非运算的函数,它能够对图像或数组进行像素级的逻辑非操作。这个函数在图像处理中常用于二值图像的反转、掩码操作等场景。

cv2.bitwise_not(src[, dst[, mask]])
参数	说明
src	输入图像/数组(单通道或多通道)
dst	输出图像/数组(与src大小和类型相同)
mask	可选的操作掩码(8位单通道数组)

cv2.bitwise_or 是 OpenCV 提供的按位或(Bitwise OR)运算函数,用于对两幅图像(或数组)进行逐像素的按位或运算。

dst = cv2.bitwise_or(src1, src2[, dst[, mask]])
参数说明
src1:第一个输入数组/图像
src2:第二个输入数组/图像
dst:输出数组/图像(可选)
mask:操作掩膜(可选),指定要处理的区域典型应用场景
图像合并:将两幅图像的非重叠部分合并
掩膜组合:组合多个掩膜区域
特征增强:增强图像中的特定特征

cv2.bitwise_and() 是 OpenCV 中用于执行按位与操作的函数,它对两个数组(通常是图像)进行逐元素的位与运算,也就是取交集。这是图像处理中用于掩膜操作、提取感兴趣区域等的基础操作。

cv2.bitwise_and(src1, src2[, dst[, mask]])
参数说明
src1: 第一个输入数组(图像)
src2: 第二个输入数组(图像)
dst: 可选输出数组(必须与输入数组大小和类型相同)
mask: 可选操作掩膜(8位单通道数组),指定要更改的输出数组元素
返回值
返回一个包含输入数组按位与结果的数组(图像)。
主要用途
图像掩膜:通过与二进制掩膜进行AND操作提取感兴趣区域
图像合成:对两幅图像进行像素级组合
特征提取:分离特定颜色通道或特征
import cv2 as cv
import numpy as npimg1 = cv.imread("open-cv/core_operation/image1.png")
img2 = cv.imread("open-cv/core_operation/19.png")
assert img1 is not None
assert img2 is not None# 划定感兴趣区域
row,col,channel = img1.shape
roi = img1[0:row, 0:col]# 产生msk
img1 = cv.cvtColor(img1,cv.COLOR_BGR2GRAY)
ret,mask = cv.threshold(img1,80,255,cv.THRESH_BINARY)
mask_inv = cv.bitwise_not(mask)# bitwise_and中使用相同的src1和src2取交集还是原来的图,然后使用mask抠图
img1_bg = cv.bitwise_and(roi,roi,mask=mask_inv)
cv.imshow("img1_bg", img1_bg)
cv.waitKey(0)
cv.destroyAllWindows
img1_fg = cv.bitwise_and(roi,roi,mask=mask)
cv.imshow("img1_fg", img1_fg)
cv.waitKey(0)
cv.destroyAllWindowsdst = cv.add(img1_bg,img1_fg)
img2[0:row, 0:col] = dst
cv.imshow("blend", img2)
cv.waitKey(0)
cv.destroyAllWindows

结果分别是根据threshold得到的mask确定的img1(1k)的背景、前景,然后融合(还是img原图),加到img2(2k)里面

2.7 使用技巧

三、Image Processing in OpenCV

相关文章:

OpenCV-Python Tutorial : A Candy from Official Main Page(持续更新)

OpenCV-Python 是计算机视觉领域最流行的开源库之一,它结合了 OpenCV (Open Source Computer Vision Library) 的 C 高性能实现和 Python 的简洁易用特性,为开发者提供了强大的图像和视频处理能力。具有以下优势: 典型应用领域: …...

【Vue】指令补充+样式绑定+计算属性+侦听器

【指令补充】 【指令修饰符】 指令修饰符可以让指令的 功能更强大,书写更便捷 分类: 1.按键修饰符(侦测当前点击的是哪个按键) 2.事件修饰符(简化程序对于阻止冒泡, 一些标签的默认默认行为的操作&…...

.Net Framework 4/C# 泛型的使用、迭代器和分部类

一、泛型的使用 泛型是用于处理算法、数据结构的一种编程方法。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以便它们能够直接用于软件构造。 泛型简单理解就是,在声明时暂时不固定其类型,例如 int 类型、double 类型等,在调用泛型时,再将要用的类型补…...

LLM 笔记:Speculative Decoding 投机采样

1 基本介绍 投机采样(Speculative Sampling)是一种并行预测多个可能输出,然后快速验证并采纳正确部分的加速策略 在不牺牲输出质量的前提下,减少语言模型生成 token 所需的时间 传统的语言模型生成是 串行 的 必须生成一个&…...

当SAP系统内计划订单转换为生产订单时发生了什么?

【SAP系统研究】 #SAP #计划订单 #生产订单 #采购申请 一、关于计划订单的一点疑惑 曾经对SAP为什么会有计划订单,是感到很疑惑的。 这个界面简单,配置点也不多,能被随意“摆布”,一旦要变形就消失得无影无踪的计划订单,why? 但是,再次重新审视过之后,才发现它其实…...

PDF转PPT转换方法总结

你是否遇到过这些场景? 收到客户发来的产品手册PDF,明天就要用它做演示; 公司历史资料只有PDF版,领导突然要求更新为幻灯片。 这时PDF转PPT工具就成了救命稻草。接下来,介绍三种PDF转PPT工具。 1. iLoveOFD在线转换…...

3D Web轻量化引擎HOOPS Communicator的定制化能力全面解析

HOOPS Communicator 是Tech Soft 3D推出的高性能Web工程图形引擎。它通过功能丰富的JavaScript API,帮助开发团队在浏览器中快速添加2D/3D CAD模型的查看与交互功能。该引擎专为工程应用优化,支持大规模模型的流畅浏览、复杂装配的智能导航、流式加载和服…...

【力扣链表篇】19.删除链表的倒数第N个节点

题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]…...

.Net Framework 4/C# 集合和索引器

一、ArrayList 类(集合) ArrayList 类位于 System.Collections 命名空间下,它可以动态地添加和删除元素。 ArrayList 提供了3个构造器,通过这3个构造器可以有3种声明方式: 默认构造器,将会以默认&#xff…...

如何使用Jmeter进行压力测试?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是压力测试 软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬…...

Grafana-ECharts应用讲解(玫瑰图示例)

工具: MySQL 数据库 MySQL Workbench 数据库管理工具(方便编辑数据) Grafana v11.5.2 Business Charts 6.6(原 Echarts插件) 安装 安装 MySQL社区版安装 MySQL Workbench安装 Grafana在 Grafana 插件中搜索 Business Charts 进行安装以上安装步骤网上教程很多,自行搜…...

洛谷P1591阶乘数码

P1591 阶乘数码 题目描述 求 n ! n! n! 中某个数码出现的次数。 输入格式 第一行为 t ( t ≤ 10 ) t(t \leq 10) t(t≤10),表示数据组数。接下来 t t t 行,每行一个正整数 n ( n ≤ 1000 ) n(n \leq 1000) n(n≤1000) 和数码 a a a。 输出格式…...

前端vue3 上传/导入文件 调用接口

点击按钮导入&#xff1a; <el-uploadaction"https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15":auto-upload"false":on-change"handleFileChange":show-file-list"false"><el-button type"warning"…...

概述侧边导航的作用与价值

侧边导航的作用与价值&#xff1a;介绍侧边导航的核心优势和用户体验提升点。设计原则&#xff1a;使用表格对比说明侧边导航的三大设计准则。基础实现方法&#xff1a;分步骤讲解静态侧边导航的实现技术。高级交互实现&#xff1a;提供滑动式侧边栏的完整交互解决方案。优化技…...

Python训练营-Day22-Titanic - Machine Learning from Disaster

Description linkkeyboard_arrow_up &#x1f44b;&#x1f6f3;️ Ahoy, welcome to Kaggle! You’re in the right place. This is the legendary Titanic ML competition – the best, first challenge for you to dive into ML competitions and familiarize yourself w…...

FreeCAD:开源世界的三维建模利器

FreeCAD 开发模式 FreeCAD的开发采用多语言协作模式&#xff0c;其核心框架与高性能模块主要使用C构建&#xff0c;而用户界面与扩展功能则通过Python脚本实现灵活定制。具体来说&#xff1a; C核心层&#xff1a;作为基础架构&#xff0c;C负责实现与Open CASCADE Technology…...

指针的定义与使用

1.指针的定义和使用 int point1(){//定义指针int a 10;//指针定义语法&#xff1a; 数据类型 * 指针变量名int * p;cout << "sizeof (int(*)) --> " << sizeof(p) << endl;//让指针记录变量a的地址 & 取址符p &a ;cout << &qu…...

嵌入式里的时间魔法:RTC 与 BKP 深度拆解

文章目录 RTC实时时钟与BKPUnix时间戳UTC/GMT时间戳转换时间戳转换BKP简介BKP基本结构1. 电池供电模块&#xff08;VBAT 输入&#xff09;2. 侵入检测模块&#xff08;TAMPER 输入&#xff09;3. 时钟输出模块&#xff08;RTC 输出&#xff09;4. 内部寄存器组 RTC简介RTC时钟源…...

Java项目中常用的中间件及其高频问题避坑

Java项目中常用的中间件及其高频问题避坑如下: 一、常用中间件分类及作用 1. ​​消息队列中间件​​ ​​作用​​:解耦系统、异步通信、削峰填谷。​​代表产品​​: ​​Kafka​​:高吞吐量流处理,适合日志收集、实时分析。​​RocketMQ​​:金融级可靠性,支持事务消…...

图卷积网络:从理论到实践

图卷积网络&#xff08;Graph Convolutional Networks, GCNs&#xff09;彻底改变了基于图的机器学习领域&#xff0c;使得深度学习能够应用于非欧几里得结构&#xff0c;如社交网络、引文网络和分子结构。本文将解释GCN的直观理解、数学原理&#xff0c;并提供代码片段帮助您理…...

ES 学习总结一 基础内容

ElasticSearch学习 一、 初识ES1、 认识与安装2、 倒排索引2.1 正向索引2.2 倒排索引 3、 基本概念3.1 文档和字段3.2 索引和倒排 4 、 IK分词器 二、 操作1、 mapping 映射属性2、 索引库增删改查3、 文档的增删改查3.1 新增文档3.2 查询文档3.3 删除文档3.4 修改文档3.5 批处…...

Maven 构建缓存与离线模式

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…...

基于51单片机的光强控制LED灯亮灭

目录 具体实现功能 设计介绍 资料内容 全部内容 资料获取 具体实现功能 具体功能&#xff1a; &#xff08;1&#xff09;按下按键K后光敏电阻进行光照检测&#xff0c;LCD1602显示光照强度值&#xff1b; &#xff08;2&#xff09;光照值小于15时&#xff0c;上面2个LE…...

【Linux操作系统】基础开发工具(yum、vim、gcc/g++)

文章目录 Linux软件包管理器 - yumLinux下的三种安装方式什么是软件包认识Yum与RPMyum常用指令更新软件安装与卸载查找与搜索清理缓存与重建元数据 yum源更新1. 备份现有的 yum 源配置2. 下载新的 repo 文件3. 清理并重建缓存 Linux编辑器 - vim启动vimVim 的三种主要模式常用操…...

gopool 源码分析

gopool gopool是字节跳动开源节流的gopkg包中协程池的一个实现。 关键结构 协程池&#xff1a; type pool struct {// The name of the poolname string// capacity of the pool, the maximum number of goroutines that are actually working// 协程池的最大容量cap int32…...

【Survival Analysis】【机器学习】【3】 SHAP可解釋 AI

前言&#xff1a; SHAP&#xff08;SHapley Additive explanations) 是一种基于博弈论的可解释工具。 现在很多高分的 论文里面都会带这种基于SHAP 分析的图&#xff0c;用于评估机器学习模型中特征对预测结果的贡献度. pip install -i https://pypi.tuna.tsinghua.edu.cn/sim…...

ModuleNotFoundError No module named ‘torch_geometric‘未找到

ModuleNotFoundError: No module named torch_geometric’未找到 试了很多方法&#xff0c;都没成功&#xff0c;安装torch对应版本的torch_geometric都不行&#xff0c; 后来发现是pip被设置了环境变量&#xff0c;所有pip文件都给安装在了一个文件夹了 排查建议 1. 检查 p…...

iOS 门店营收表格功能的实现

iOS 门店营收表格功能实现方案 核心功能需求 数据展示&#xff1a;表格形式展示门店/日期维度的营收数据排序功能&#xff1a;支持按营收金额、增长率等排序筛选功能&#xff1a;按日期范围/门店/区域筛选交互操作&#xff1a;点击查看详情、数据刷新数据可视化&#xff1a;关…...

链表题解——环形链表【LeetCode】

141. 环形链表 方法一 核心思想&#xff1a; 使用一个集合 seen 来记录已经访问过的节点。遍历链表&#xff0c;如果当前节点已经存在于集合中&#xff0c;说明链表存在环&#xff1b;否则&#xff0c;将当前节点添加到集合中&#xff0c;继续遍历。如果遍历结束&#xff08;h…...

Cell-o1:强化学习训练LLM解决单细胞推理问题

细胞类型注释是分析scRNA-seq数据异质性的关键任务。尽管最近的基础模型实现了这一过程的自动化&#xff0c;但它们通常独立注释细胞&#xff0c;未考虑批次水平的细胞背景或提供解释性推理。相比之下&#xff0c;人类专家常基于领域知识为不同细胞簇注释不同的细胞类型。为模拟…...