【计算机视觉】OpenCV项目实战:基于OpenCV的图像分割技术深度解析与实践指南
基于OpenCV的图像分割技术深度解析与实践指南
- 项目概述与技术背景
- 项目核心特点
- 传统分割算法分类
- 环境配置与项目结构
- 系统要求
- 安装步骤
- 项目结构解析
- 核心算法实现解析
- 1. 阈值分割(Otsu方法)
- 2. Canny边缘检测
- 3. 分水岭算法
- 实战应用指南
- 1. 基础分割流程
- 2. 多算法比较框架
- 3. 医学图像分割专项
- 常见问题与解决方案
- 1. 过分割问题
- 2. 边缘断裂问题
- 3. 光照不均影响
- 性能优化技巧
- 1. 多尺度处理
- 2. ROI优先处理
- 3. 并行计算加速
- 学术背景与扩展阅读
- 基础论文
- 现代发展
- 应用场景与展望
- 典型工业应用
- 未来发展方向
图像分割是计算机视觉领域的核心任务之一,它将数字图像划分为多个区域或对象,为高级视觉理解奠定基础。本文将深入剖析Kite团队开发的基于OpenCV的图像分割项目,从传统算法原理到现代实现技巧,提供一套完整的实战指南。
项目概述与技术背景
项目核心特点
Kite的图像分割项目展示了OpenCV在传统图像分割任务中的典型应用:
- 多算法实现:包含阈值分割、边缘检测、区域生长等多种经典方法
- 模块化设计:各分割技术独立实现,便于扩展和比较
- 教育导向:代码注释详尽,适合学习传统图像处理技术
- 轻量级实现:仅依赖OpenCV和NumPy,无需深度学习框架
图:项目实现的多种分割效果对比(来源:项目仓库)
传统分割算法分类
项目涵盖的主要算法类型:
- 基于阈值的分割:Otsu方法、自适应阈值
- 基于边缘的分割:Canny边缘检测、Sobel算子
- 基于区域的分割:分水岭算法、区域生长
- 基于聚类的分割:K-means色彩聚类
环境配置与项目结构
系统要求
组件 | 最低要求 | 推荐配置 |
---|---|---|
Python | 3.6 | 3.8+ |
OpenCV | 4.2 | 4.5+ |
NumPy | 1.19 | 1.21+ |
内存 | 4GB | 8GB+ |
安装步骤
# 克隆项目仓库
git clone https://github.com/kiteco/kite-python-blog-post-code.git
cd kite-python-blog-post-code/image-segmentation# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows# 安装依赖
pip install opencv-python numpy matplotlib# 验证安装
python -c "import cv2; print(f'OpenCV版本: {cv2.__version__}')"
项目结构解析
image-segmentation/
├── images/ # 示例图像
│ ├── sample.jpg
│ └── medical.png
├── thresholding.py # 阈值分割实现
├── edge_based.py # 边缘检测分割
├── region_based.py # 区域分割算法
├── clustering.py # 色彩聚类分割
├── utils.py # 辅助函数
└── evaluate.py # 分割评估指标
核心算法实现解析
1. 阈值分割(Otsu方法)
# thresholding.py
import cv2
import numpy as npdef otsu_thresholding(img_path):img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)blur = cv2.GaussianBlur(img, (5,5), 0)# Otsu自动阈值计算_, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)return thresh
数学原理:
Otsu方法最大化类间方差:
\sigma_b^2(t) = \omega_1(t)\omega_2(t)[\mu_1(t)-\mu_2(t)]^2
其中:
- ω i \omega_i ωi 为各类别概率
- μ i \mu_i μi 为各类别均值
2. Canny边缘检测
# edge_based.py
def canny_segmentation(img_path, low=50, high=150):img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)blur = cv2.GaussianBlur(img, (5,5), 0)# Canny边缘检测edges = cv2.Canny(blur, low, high)# 边缘闭合处理kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel, iterations=2)return closed
参数优化建议:
- 高低阈值比通常为1:2或1:3
- 先进行高斯模糊减少噪声影响
- 形态学操作可改善边缘连续性
3. 分水岭算法
# region_based.py
def watershed_segmentation(img_path):img = cv2.imread(img_path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 前景/背景标记_, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)# 确定确定背景区域kernel = np.ones((3,3), np.uint8)sure_bg = cv2.dilate(thresh, kernel, iterations=3)# 距离变换找确定前景dist = cv2.distanceTransform(thresh, cv2.DIST_L2, 5)_, sure_fg = cv2.threshold(dist, 0.7*dist.max(), 255, 0)# 未知区域计算sure_fg = np.uint8(sure_fg)unknown = cv2.subtract(sure_bg, sure_fg)# 标记连通域_, markers = cv2.connectedComponents(sure_fg)markers += 1markers[unknown==255] = 0# 应用分水岭markers = cv2.watershed(img, markers)img[markers == -1] = [255,0,0] # 标记边界return img
关键步骤说明:
- 通过距离变换识别种子区域
- 标记确定背景、前景和未知区域
- 连通域标记初始化分水岭
- 边界像素标记为-1
实战应用指南
1. 基础分割流程
import cv2
from thresholding import otsu_thresholding# 加载图像
input_path = "images/sample.jpg"
output_path = "results/threshold_result.jpg"# 应用Otsu阈值分割
result = otsu_thresholding(input_path)# 保存结果
cv2.imwrite(output_path, result)
2. 多算法比较框架
import matplotlib.pyplot as plt
from thresholding import otsu_thresholding
from edge_based import canny_segmentation
from region_based import watershed_segmentationmethods = {"Otsu": otsu_thresholding,"Canny": canny_segmentation,"Watershed": watershed_segmentation
}img = cv2.imread("images/medical.png", cv2.IMREAD_COLOR)plt.figure(figsize=(15,10))
for i, (name, func) in enumerate(methods.items(), 1):plt.subplot(2, 2, i)result = func(img)plt.imshow(result, cmap='gray')plt.title(name)plt.tight_layout()
plt.savefig("comparison.png")
3. 医学图像分割专项
def medical_image_processing(img_path):# 读取DICOM或PNG图像img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)# 对比度增强clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))enhanced = clahe.apply(img)# 自适应阈值thresh = cv2.adaptiveThreshold(enhanced, 255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY, 11, 2)# 小区域去除contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)for cnt in contours:if cv2.contourArea(cnt) < 100:cv2.drawContours(thresh, [cnt], 0, 0, -1)return thresh
常见问题与解决方案
1. 过分割问题
现象:单个对象被分割为多个区域
解决方法:
- 预处理平滑:
blur = cv2.bilateralFilter(img, 9, 75, 75)
- 后处理合并:
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5)) merged = cv2.morphologyEx(result, cv2.MORPH_CLOSE, kernel)
- 调整参数:
# 增大分水岭的距离变换阈值 _, sure_fg = cv2.threshold(dist, 0.5*dist.max(), 255, 0)
2. 边缘断裂问题
现象:对象边界不连续
优化方案:
- 增强边缘检测:
edges = cv2.Canny(img, low_thresh, high_thresh, apertureSize=5)
- 形态学修复:
kernel = np.ones((3,3), np.uint8) closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)
- 使用结构化森林边缘检测:
edge_detector = cv2.ximgproc.createStructuredEdgeDetection("model.yml") edges = edge_detector.detectEdges(np.float32(img)/255.0
3. 光照不均影响
现象:阴影区域分割失败
处理策略:
- 背景减除:
bg_model = cv2.createBackgroundSubtractorMOG2() fg_mask = bg_model.apply(img)
- 局部阈值:
thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY, 51, 10 )
- 同态滤波:
def homomorphic_filter(img):img_log = np.log1p(np.float32(img))rows, cols = img.shapecrow, ccol = rows//2, cols//2mask = np.zeros((rows, cols), np.float32)D = 30for i in range(rows):for j in range(cols):d = np.sqrt((i-crow)**2 + (j-ccol)**2)mask[i,j] = 1 - np.exp(-(d**2)/(2*(D**2)))filtered = np.fft.ifft2(np.fft.ifftshift(np.fft.fftshift(np.fft.fft2(img_log)) * mask))return np.exp(np.real(filtered))-1
性能优化技巧
1. 多尺度处理
def multi_scale_segmentation(img_path):img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)results = []for scale in [0.5, 1.0, 2.0]:resized = cv2.resize(img, None, fx=scale, fy=scale,interpolation=cv2.INTER_AREA)# 在不同尺度下分割thresh = cv2.threshold(resized, 0, 255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]# 还原到原尺寸thresh = cv2.resize(thresh, (img.shape[1], img.shape[0]),interpolation=cv2.INTER_NEAREST)results.append(thresh)# 融合多尺度结果final = np.mean(np.stack(results), axis=0)return (final > 127).astype(np.uint8) * 255
2. ROI优先处理
def roi_based_segmentation(img_path):img = cv2.imread(img_path)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 粗略检测感兴趣区域blur = cv2.GaussianBlur(gray, (25,25), 0)_, rough_thresh = cv2.threshold(blur, 0, 255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 在ROI内精细分割contours, _ = cv2.findContours(rough_thresh, cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)mask = np.zeros_like(gray)for cnt in contours:if cv2.contourArea(cnt) > 1000:x,y,w,h = cv2.boundingRect(cnt)roi = gray[y:y+h, x:x+w]# 精细处理roi_thresh = cv2.adaptiveThreshold(roi, 255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY, 11, 2)mask[y:y+h, x:x+w] = roi_threshreturn mask
3. 并行计算加速
from multiprocessing import Pool
import osdef process_image(img_file):img_path = os.path.join("images", img_file)result = otsu_thresholding(img_path)cv2.imwrite(f"results/{img_file}", result)if __name__ == "__main__":img_files = [f for f in os.listdir("images") if f.endswith(".jpg")]with Pool(4) as p:p.map(process_image, img_files)
学术背景与扩展阅读
基础论文
-
Otsu阈值法:
- Otsu N. “A Threshold Selection Method from Gray-Level Histograms” IEEE Trans. Sys. Man. Cyber. 1979
-
Canny边缘检测:
- Canny J. “A Computational Approach to Edge Detection” IEEE PAMI 1986
-
分水岭算法:
- Vincent L, Soille P. “Watersheds in Digital Spaces: An Efficient Algorithm Based on Immersion Simulations” IEEE PAMI 1991
现代发展
-
图割方法:
- Boykov Y, Jolly M. “Interactive Graph Cuts for Optimal Boundary & Region Segmentation” ICCV 2001
-
超像素技术:
- Achanta R, et al. “SLIC Superpixels Compared to State-of-the-Art” IEEE PAMI 2012
-
能量最小化框架:
- Rother C, et al. “GrabCut: Interactive Foreground Extraction” SIGGRAPH 2004
应用场景与展望
典型工业应用
- 医学影像:肿瘤区域分割
- 自动驾驶:道路场景解析
- 工业检测:缺陷区域识别
- 遥感图像:地表覆盖分类
未来发展方向
- 与传统CV融合:结合深度学习特征
- 实时处理优化:边缘设备部署
- 交互式分割:人机协同工作流
- 三维扩展:体数据分割技术
Kite的这个OpenCV图像分割项目虽然聚焦于传统算法,但其清晰的实现和模块化设计为理解图像分割基础提供了绝佳的学习材料。通过本文的技术解析和实战指南,读者可以掌握经典分割技术的核心思想,并具备将其应用于实际项目的能力。在深度学习大行其道的今天,这些传统方法仍在小样本、实时性要求高的场景中发挥着不可替代的作用。
相关文章:
【计算机视觉】OpenCV项目实战:基于OpenCV的图像分割技术深度解析与实践指南
基于OpenCV的图像分割技术深度解析与实践指南 项目概述与技术背景项目核心特点传统分割算法分类 环境配置与项目结构系统要求安装步骤项目结构解析 核心算法实现解析1. 阈值分割(Otsu方法)2. Canny边缘检测3. 分水岭算法 实战应用指南1. 基础分割流程2. …...
线性表-顺序表(Sequential List)
1 线性表 1.1 顺序表(Sequential List) 顺序表并不难理解,主要是知道顺序表是在内存中连续存储的一段数据,知道这个后,相应的算法也就非常简单了。 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的…...
《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-俄罗斯方块:用旋转矩阵打造经典
《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-🎮 俄罗斯方块:用旋转矩阵打造经典 🧊 大家好!今天我将带大家用MATLAB实现经典的俄罗斯方块游戏。我们将从数学原理出发…...
通过user-agent来源判断阻止爬虫访问网站,并防止生成[ error ] NULL日志
一、TP5.0通过行为(Behavior)拦截爬虫并避免生成 [ error ] NULL 错误日志 1. 创建行为类(拦截爬虫) 在 application/common/behavior 目录下新建BlockBot.php ,用于识别并拦截爬虫请求: <?php name…...
微服务的“迷宫” - 我们为何需要服务网格?
微服务的“迷宫” - 我们为何需要服务网格? 你好!欢迎来到我们的服务网格探索之旅。近年来,“微服务架构”无疑是软件开发领域最热门的词汇之一。它将庞大的单体应用拆分成一组小而独立的、可以独立开发、部署和扩展的服务单元,带来了前所未有的敏捷性和弹性。开发团队可以…...
Ubuntu 安装 HAProxy
HAProxy 是什么 HAProxy(High Availability Proxy) 是一个 高性能、高可用的 TCP 和 HTTP 负载均衡器与代理服务器。 HAProxy 的特点 特性说明支持协议HTTP、HTTPS、TCP高性能使用 C 语言编写,性能极高高可用与 Keepalived 配合可实现主备健…...
VUE CLI - 使用VUE脚手架创建前端项目工程
前言 前端从这里开始,本文将介绍如何使用VUE脚手架创建前端工程项目 1.预准备(编辑器和管理器) 编辑器:推荐使用Vscode,WebStorm,或者Hbuilder(适合刚开始练手使用),个…...
Nginx高级配置
目录 一.网页的状态页 二. Nginx第三方模块 2.1 echo模块 三. 变量 3.1 内置变量 3.2 自定义变量 四. 自定义访问日志 (优化) 4.1 自定义访问日志的格式 4.2 自定义json 格式日志 五. Nginx压缩功能 六 . HTTPS 功能 6.1 https概述 6.2 配置实例-----自签名证…...
Docker镜像搬运工:深入解析export与import,实现容器环境无缝迁移!
Docker作为现代开发运维的利器,其镜像和容器的管理技巧直接影响效率。当我们需要跨环境迁移容器状态时,docker export和docker import这对组合命令就能大显身手。本文带你彻底搞懂它们的核心逻辑、使用场景及避坑指南! 一、Docker export&…...
数字孪生实战笔记(1)数字孪生的含义、应用及技术体系
一、含义 数字孪生(Digital Twin)是一种通过数字化模型在虚拟世界中实时映射和模拟物理实体、系统或过程的技术。它的核心目的是通过对现实对象的建模、感知、分析和预测,实现对物理世界的全面感知、智能控制和优化决策。数字孪生 实体对象 …...
计算机网络 4-2-2 网络层(IPv4)
2.7 网络地址转换NAT 引入端口号:IP地址端口号→一个特定的进程,(不同主机可能存在相同端口号) 网络层实现了“主机到主机”的通信。网络层在IP数据报的首部,指明源IP地址、目的IP地址 传输层实现了“端到端” &#…...
第二个简单的SpringBoot和Vue前后端全栈的todoapp案例
项目源于哔哩哔哩,按视频手敲了一下,补充上代码和一些细节。 全栈项目实践:1小时快速入门SpringBootvue3element-plus_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LH4y1w7Nd/?spm_id_from333.1387.favlist.content.click&vd_…...
探秘 Canva AI 图像生成器:重塑设计创作新范式
Canva 凭借简洁易用的界面和海量模板资源,早已成为设计师和普通用户的心头好。而 Canva AI 图像生成器的推出,更是为设计领域带来了一场深刻变革,以智能化的手段重塑了图像创作的方式与边界。 技术内核:AI 如何驱动图像生成 Can…...
栈应用:辅助站(c++)
干货 今天讲讲最大辅助栈和最小辅助栈 主栈进入元素的时候 最大辅助栈:保证新元素大于等于(辅助栈)顶的时候,再进入辅助栈这样就能保证最大辅助栈的栈顶元素 是主栈中的最大值 主栈出栈的时候 最大辅助栈:主栈出栈元素如果等于(辅助栈)的栈顶元素,再…...
AI时代的数据可视化:未来已来
你有没有想过,数据可视化在未来会变成什么样?随着人工智能(AI)的飞速发展,数据可视化已经不再是简单的图表和图形,而是一个充满无限可能的智能领域。AI时代的可视化不仅能自动解读数据,还能预测…...
常见音频主控芯片以及相关厂家总结
音频主控芯片是音频设备(如蓝牙耳机、音箱、功放等)的核心组件,负责音频信号的解码、编码、处理和传输。以下是常见的音频主控芯片及其相关厂家,按应用领域分类: 蓝牙音频芯片 主要用于无线耳机、音箱等设备࿰…...
湖仓一体架构在金融典型数据分析场景中的实践
在数字经济与金融科技深度融合的今天,数据已成为金融机构的核心战略资产。然而,传统数据架构面临着三大困局,制约着金融机构数据价值的充分释放。 一、需求驱动更多银行数据分析场景 金融机构,特别是银行业,面临着双重…...
VBA —— 学习Day5
子程序与函数 子程序:实现特定功能的程序代码块 子程序语法: [修饰符] Sub 子程序名称([参数1,参数2,参数3]) 代码块 End Sub 子程序如何调用: 1 . 子程序名 [参数1,参数2,...] 2. Cal…...
Flink 实时数据一致性与 Exactly-Once 语义保障实战
在构建企业级实时数仓的过程中,“数据一致性” 是保障指标准确性的核心能力,尤其是在金融、电商、医疗等对数据敏感度极高的场景中。Flink 作为流批一体的实时计算引擎,其内建的 Exactly-Once 语义为我们提供了强有力的保障机制。本篇将围绕如何实现端到端的数据一致性、如何…...
Java云原生到底是啥,有哪些技术
☁️ Java云原生:程序员の修仙飞升指南(附渡劫技巧) 一、修仙世界观:传统程序 vs 云原生程序 🏡 传统Java程序(老宅院) 特点:单体大瓦房、扩建要拆墙(耦合度高…...
IPM IMI111T-026H 高效风扇控制板
概述: REF-MHA50WIMI111T 是一款专为风扇驱动设计的参考开发板,搭载了英飞凌的IMI111T-026H iMOTION™智能功率模块(IPM)。这个模块集成了运动控制引擎(MCE)、三相栅极驱动器和基于IGBT的功率级,全部封装在一个紧凑的DSO22封装中。REF-MHA50…...
JavaScript基础-局部作用域
在JavaScript中,理解不同种类的作用域是掌握这门语言的关键之一。作用域决定了变量和函数的可访问性(即可见性和生命周期)。与全局作用域相对应的是局部作用域,它限制了变量和函数只能在其定义的特定范围内被访问。本文将深入探讨…...
[特殊字符]Meilisearch:AI驱动的现代搜索引擎
前言 大家好,我是MAI麦造! 上文介绍一了Manticore Search 这款轻量级的搜索引擎,这次又有了新的发现!传送门: Elasticsearch太重?它的超轻量的替代品找到了! 这是一个让我超级兴奋的AI搜索引…...
K8S Svc Port-forward 访问方式
在 Kubernetes 中,kubectl port-forward 是一种 本地与集群内资源(Pod/Service)建立临时网络隧道 的访问方式,无需暴露服务到公网,适合开发调试、临时访问等场景。以下是详细使用方法及注意事项: 1. 基础用…...
SD06_前后端分离项目部署流程(采用Nginx)
本文档详细描述了如何在Ubuntu 20.04服务器上从零开始部署Tlias前后端分离系统。Tlias系统由Spring Boot后端(tlias-web-management)和Vue前端(vue-tlias-management)组成。 目录 环境准备安装MySQL数据库部署后端项目部署前端项…...
计算机网络:家庭路由器WiFi信号的发射和手机终端接收信号原理?
WiFi路由器与手机之间的信号传输涉及多个技术层面的协作,以下是其工作原理的详细步骤: 一、数据封装与协议处理 应用层数据生成 用户操作(如浏览网页、视频播放)产生数据包,经TCP/IP协议栈逐层封装,添加IP地址(网络层)和MAC地址(数据链路层)。协议封装 数据包被封装…...
【Redis】string
文章目录 string 字符串常用命令设置和获取setgetmget & mset 计数操作incr & incrbydecr & decrbyincrbyfloat 字符串操作appendstrlengetrangesetrange string 字符串 关于 Redis 的字符串,有几点需要注意 Redis 所有的 key 的类型都是字符串类型va…...
vue3的响应式设计原理
Vue 3 的响应式设计是其核心特性之一,依赖于 Proxy 和 依赖收集机制,相比 Vue 2 的 Object.defineProperty,Vue 3 的响应式系统更加高效、灵活且易于维护。 以下是 Vue 3 响应式设计的核心原理: 一、核心机制概览 使用 Proxy 实现…...
学习黑客5 分钟深入浅出理解Linux Logs [特殊字符]
5 分钟深入浅出理解Linux Logs 📝 大家好!今天我们将探索Linux系统中的日志机制——这是系统管理和安全分析的重要组成部分。在网络安全学习特别是TryHackMe平台上的挑战中,理解和分析日志是发现入侵痕迹、追踪攻击者行为和收集证据的关键技…...
【Docker系列】docker inspect查看容器部署位置
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
journalctl使用
journalctl 可以查看很多服务的日志,比如 docker,ollama 等。 1. 查看 xx 服务的最新日志(实时滚动) sudo journalctl -u docker -f -f 参数表示 跟随(follow),会持续输出最新日志࿰…...
Satori:元动作 + 内建搜索机制,实现超级推理能力
Satori:元动作 内建搜索机制,实现超级推理能力 论文大纲一、背景:LLM 推理增强的三类方法1. 基于大规模监督微调(SFT)的推理增强2. 借助外部机制在推理时进行搜索 (RLHF / 多模型 / 工具)3. 现有局限性总结 二、Sator…...
基于语言模型的依存关系分句 和 主题变换检测(基于词频和句段得分)的 意思
🧠 一、基于语言模型的依存关系分句(Dependency-based Segmentation) ✅ 说人话: 用语言模型判断句子里的语法结构(谁依赖谁),找到合理的“断点”,把太长的句子拆成语法上更自然的小…...
计算机体系结构一些笔记
1、异构计算:CPU也像人类社会一样存在专业分工。 异构计算(Heterogeneous Computing)是指不同类型的计算单元合作完 成计算任务。每个计算单元采用不同的架构,分别擅长处理某一种类型 的计算任务。整个计算任务分解为小的单位&…...
Go语言——goflow工作流使用
一、引入依赖 这个很坑,他不允许连接带密码的redis,只能使用不带密码的redis,要带密码的话得自己改一下源代码,无语 go get github.com/s8sg/goflow二、画出我们的工作流程 三、编写代码 package mainimport ("encoding/j…...
理性地倾听与表达:检索算法的语言学改进
论文标题 Rational Retrieval Acts: Leveraging Pragmatic Reasoning to Improve Sparse Retrieval 论文地址 https://arxiv.org/pdf/2505.03676 代码地址 https://github.com/arthur-75/Rational-Retrieval-Acts 作者背景 巴黎萨克雷大学,索邦大学ÿ…...
RV1126 ROS2环境交叉编译及部署(基于官方Docker)
RV1126 ROS2环境交叉编译及部署(基于官方Docker) 0 前言1 SDK源码更新1.1 启动Docker容器1.2 更新SDK源码1.3 SDK更新问题2 ROS2编译配置3 Buildroot rootfs编译ROS2的依赖包3.1 编译问题解决4 使用Docker交叉编译ROS24.1 准备Linux(Ubuntu) PC机的依赖环境4.1.1 Ubuntu PC机…...
每日脚本学习5.10 - XOR脚本
xor运算的简介 异或就是对于二进制的数据可以 进行同0异1 简单的演示 : 结果是 这个就是异或 异或的作用 1、比较两数是否相等 2、可以进行加密 加密就是需要key 明文 :0b010110 key : 0b1010001 这个时候就能进行加密 明文 ^ key密文 还有这个加密比…...
深圳SMT贴片加工厂制造流程解析
内容概要 作为大湾区电子制造产业链的重要节点,深圳SMT贴片加工厂凭借精密的生产体系与技术创新,构建了涵盖12道核心工序的标准化流程。从PCB基板的来料检验开始,通过全自动贴片机的高精度元件定位、SPI三维锡膏检测、智能温控回流焊接等关键…...
英语六级---2019.6 卷二 仔细阅读2
文章 Officials at the White House announced a new space policy focused on managing the increasing number of satellites that companies and governments are launching into space. Space Policy Directive-3 lays out general guidelines for the United States to mi…...
【小沐学GIS】基于C++绘制二维瓦片地图2D Map(QT、OpenGL、GIS)
🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(OpenGL、glfw、glut、GIS)第二期3【小沐学…...
Windows 系统 - Trae 内 终端 无法使用 node (重新配置 nodejs 路径)
想在 Trae 中尝试一下 mcp, 所以 Windows 系统下安装了 node.js. 安装成功后, 在 Windows 的 powershell 下可以 node -v, 但是在 Trae 的终端下输入 node -v 时, 识别提示不能识别 node 命令. 参考了 vscode 下的一种解决方式 VS Code 内终端无法使用 node 解决方案是相似的…...
AI编程: 使用Trae1小时做成的音视频工具,提取音频并识别文本
背景 在上个月,有网页咨询我怎么才能获取视频中的音频并识别成文本,我当时给他的回答是去问一下AI,让AI来给你答案。 他觉得我在敷衍他,大骂了我一顿,大家觉得我的回答对吗? 小编心里委屈,我…...
springCloud/Alibaba常用中间件之Nacos服务注册与发现
文章目录 SpringCloud Alibaba:依赖版本补充六、Nacos:服务注册与发现1、下载安装Nacos2、服务注册1. 导入依赖(这里以服务提供者为例)2. 修改配置文件和主启动类3. 创建业务类4. 测试 3.服务映射1. 导入依赖2. 修改配置文件和主启动类3. 创建业务类和RestTemplate配置类用来提…...
鸿蒙 所有API缩略图鉴
从HarmonyOS NEXT Developer Preview1(API 11)版本开始,HarmonyOS SDK以 Kit 维度提供丰富、完备的开放能力,涵盖应用框架、应用服务、系统、媒体、AI、图形在内的六大领域,共计30000个API...
互联网大厂Java求职面试:AI集成场景下的技术挑战与架构设计
标题:互联网大厂Java求职面试:AI集成场景下的技术挑战与架构设计 第一幕:向量数据库选型与性能调优 技术总监(严肃脸): 郑薪苦,我们最近在做一个基于大语言模型的企业级AI应用,需要…...
搜索与图论
文章目录 搜索与图论深度优先搜索 DFS[843. n-皇后问题 - AcWing题库](https://www.acwing.com/problem/content/845/) 宽度优先搜索 BFS[844. 走迷宫 - AcWing题库](https://www.acwing.com/problem/content/description/846/) 树与图的存储[846. 树的重心 - AcWing题库](http…...
【递归、搜索和回溯】二叉树中的深搜
个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 前言1 2331. 计算布尔二叉树的值1.1 分析1.2 代码 2 129. 求根节点到叶节点数字之和2.1 分析2.2 代码 3 814. 二叉树剪枝3.1 分析3.2 代码 4 98. 验证…...
通俗的理解MFC消息机制
1. 消息是什么? 想象你家的门铃响了(比如有人按门铃、敲门、或者有快递),这些都是“消息”。 在 MFC 中,消息就是系统或用户触发的各种事件,比如鼠标点击(WM_LBUTTONDOWN)、键盘输入…...
Windows CMD通过adb检查触摸屏Linux驱动是否被编译
检查 CONFIG_TOUCHSCREEN_GT9XX 是否启用,检查内核是否编译了Goodix GT9XX系列触摸屏的驱动支持 Windows CMD.exe输入: adb shell “zcat /proc/config.gz | grep CONFIG_TOUCHSCREEN_GT9XX” 如果返回CONFIG_TOUCHSCREEN_GT9XXy,表示驱动已编…...