Python3.6+OpenCV3实现RSF水平集图像分割:原理、代码与避坑指南
简介RSF模型是活动轮廓理论中结合区域统计与边界信息的经典方法尤其适合处理模糊边缘、低对比度和背景复杂的图像分割任务。压缩包内共两个文件包含一个Python实现脚本RSF.py和一张测试用BMP图像整体大小仅5KB结构紧凑适合逐行研读。脚本完整复现了RSF模型的核心流程初始化封闭蛇形轮廓构造由边缘能量与区域能量组成的联合能量函数采用梯度下降法迭代更新曲线位置并通过阈值或迭代次数控制收敛。运行代码时读者可以直观看到水平集如何从初始曲线逐步演化到目标边界同时掌握OpenCV3与NumPy的协同用法针对噪声干扰和低对比度场景还可调整能量参数观察区域项和边缘项对分割结果的影响。该资源已有1102人学习下载适合具备基础Python知识、希望从代码层面理解活动轮廓模型的图像分割学习者作为参考。1. 活动轮廓模型里的 RSF为什么要在 Python3.6 OpenCV3 环境里把它跑起来拿一张腹部 MRI 或者超声图像左右两边亮度差上一大截全局阈值分割基本是废的传统的 CV 活动轮廓模型也常常把同一块组织拆成两半。RSF 模型Region-Scalable Fitting部分论文也叫 LBF就是冲着这类灰度不均匀图像去的它用高斯核把“局部区域拟合”写进能量泛函再通过水平集迭代做分割。我见过很多老项目至今还固定在 Python3.6 和 Opencv3 上模型代码也是当年那批从 MATLAB 移植过来的版本。本文不会只讲原理而是把这套东西拆到“能照着复现”的程度能量函数怎么翻译成卷积、最小可运行代码怎么组织、sigma 和 nu 这类参数调成多少、以及 OpenCV3 环境下最容易踩的六个坑。2. RSF 的能量泛函与水平集求解它凭什么能吃下灰度不均匀2.1 从全局假设到局部拟合CV 模型在灰度不均匀图像上的失效点Chan-Vese 活动轮廓模型把图像前景和背景各建模成一个全局灰度均值这在大前提上是“亮度均匀”的。遇到 MRI 里的偏场、工业拍照里的反光、超声里的衰减前景中不同位置的灰度差异已经大于前景和背景的差异全局均值就完全失去判别力。RSF 的核心改动是对轮廓上的每一个点 x只取它周围一个高斯窗口内的像素来估计“局部前景均值 f1(x)”和“局部背景均值 f2(x)”。窗口尺度由 sigma 控制sigma 大则偏全局sigma 小则偏局部这也是“Region-Scalable”这个名称的来源。判断一个点到底属于目标还是背景不再看它和全局均值比而是看它和自己的局部邻域比灰度缓慢变化的影响就被抵消掉了。2.2 两个局部拟合值 f1(x)、f2(x)把能量泛函翻译成卷积操作RSF 的能量泛函可以写成这样的形式E λ1·∫ K(y−x)·|I(y)−f1(x)|²·H(φ(y)) dy dx λ2·∫ K(y−x)·|I(y)−f2(x)|²·(1−H(φ(y))) dy dx ν·∫ |∇H(φ)| dx μ·∫ (|∇φ|−1)² dx其中 K 是标准差为 sigma 的高斯核H 是平滑后的 Heavisideφ 是水平集函数。前两项是数据拟合项第三项惩罚轮廓长度第四项是水平集正则项用来避免反复重新初始化。固定 φ 时f1 和 f2 的最优解是两个局部加权平均f1(x) (K ⋆ (H(φ)·I)) / (K ⋆ H(φ)) f2(x) (K ⋆ ((1−H(φ))·I)) / (K ⋆ (1−H(φ)))这两个式子非常关键对所有像素K 与图像的乘积卷积一次、与掩码卷积一次再做除法就可以得到全图每个点的局部拟合均值。这意味着 RSF 最重的计算不是梯度下降本身而是卷积。用 OpenCV 的cv2.filter2D正好可以一次完成整幅图的高斯加窗积分的计算。2.3 梯度流方程为什么只剩曲率项不是卷积对能量做变分可以得到 RSF 的水平集演化方程∂φ/∂t −δ(φ)·(λ1·e1(x) − λ2·e2(x)) ν·δ(φ)·κ μ·(Δφ − κ)其中e1(x) K ⋆ (I − f1)² e2(x) K ⋆ (I − f2)² κ div(∇φ / |∇φ|)e1 和 e2 本质上还是卷积。κ 是曲率Δφ 是拉普拉斯这两项必须用差分实现。所以整个算法里能用 OpenCV 加速的部分占了一大半真正需要手写差分的是曲率项和拉普拉斯项。实现时会把 φ 初始化为一个带符号的矩形或圆形轮廓然后按照这个梯度流一次次更新 φ直到零水平面对齐目标边缘。下一章我就直接给出可以在 Python3.6 OpenCV3 里运行的完整代码骨架。3. 在 Python3.6 OpenCV3 里复现 RSF 的最小可运行实现3.1 依赖环境与版本边界Python3.6 配 OpenCV3 的经典组合Python3.6 属于老版本装库时要注意版本配套。我这里常用的组合是numpy1.19.5 opencv-python3.4.2.17OpenCV3.4.2 是支持 Python3.6 且比较稳定的一个版本。不要图新装 opencv-python 4.x因为 Python3.6 在 OpenCV4 某些版本上虽然也能装但cv2.findContours的返回值和 OpenCV3 不一样老项目里一堆代码会直接崩。如果你是从 OpenCV3 编程入门那套旧教程走过来的对cv2的接口习惯应该很熟但注意 RSF 不是 OpenCV 自带函数OpenCV 在这里只承担图像读取、卷积、差分和最终轮廓提取的工作。用 pip 建一个独立虚拟环境先固定上面两个包再装 scipy 1.4.1 用于后续验证环境基本就不会翻车。3.2 关键函数代码Heaviside、Dirac、高斯核与局部拟合值我把 RSF 拆成几个小函数来写这样每一步都能单独验证。先看基础函数import cv2 import numpy as np EPS 1.0 def gaussian_kernel(sigma): r int(4.0 * sigma 0.5) x np.arange(-r, r 1, dtypenp.float64) k1d np.exp(-x * x / (2.0 * sigma * sigma)) K k1d[:, None] * k1d[None, :] return K / K.sum() def heaviside(phi): return 0.5 * (1.0 2.0 / np.pi * np.arctan(phi / EPS)) def dirac(phi): return (1.0 / np.pi) * EPS / (EPS * EPS phi * phi) def convf(src, K): return cv2.filter2D(src, cv2.CV_64F, K, borderTypecv2.BORDER_REPLICATE) def local_fitting(img, phi, K): H heaviside(phi) I img.astype(np.float64) f1 convf(H * I, K) / (convf(H, K) 1e-8) f2 convf((1.0 - H) * I, K) / (convf(1.0 - H, K) 1e-8) return H, f1, f2 def curvature(phi): _, gx np.gradient(phi) gy, _ np.gradient(phi) norm np.sqrt(gx * gx gy * gy) 1e-10 nx, ny gx / norm, gy / norm _, nxx np.gradient(nx) nyy, _ np.gradient(ny) return nxx nyy这里gaussian_kernel把核半径截断到 4 倍 sigma足够覆盖高斯核 99.99% 的权重核越大计算越慢但截断半径不够会让拟合值出现接缝。heaviside和dirac里的EPS是平滑参数在灰度 0 到 255 的尺度下取 1.0 是常用值。convf统一用BORDER_REPLICATE确定每个卷积位置都使用扩展边缘值不会因为图像边界被补零而把局部拟合值拉偏。local_fitting里的1e-8是为了防除零尤其是初始化轮廓没有完全覆盖前景或背景时。3.3 水平集演化主循环与轮廓提取注意 OpenCV3 的 findContours 返回值有了基础函数主循环其实很短。我把一个典型实现放在下面def rsf_segment(img, init_phi, sigma5.0, mu1.0, nu0.001 * 255.0 * 255.0, dt0.1, max_iter200): K gaussian_kernel(sigma) phi init_phi.copy() for it in range(max_iter): H, f1, f2 local_fitting(img, phi, K) d dirac(phi) I img.astype(np.float64) e1 convf((I - f1) ** 2, K) e2 convf((I - f2) ** 2, K) kappa curvature(phi) lap cv2.Laplacian(phi, cv2.CV_64F, ksize3) dphi -d * (e1 - e2) nu * d * kappa mu * (lap - kappa) phi phi dt * dphi mask np.where(phi 0, 255, 0).astype(np.uint8) contours, hierarchy cv2.findContours( mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) return phi, mask, contours初始化轮廓用圆形符号约定是 phi 大于 0 为前景小于 0 为背景def init_circle(shape, cx, cy, r): yy, xx np.mgrid[0:shape[0], 0:shape[1]] phi r - np.sqrt((xx - cx) ** 2 (yy - cy) ** 2) return np.clip(phi, -2.0, 2.0)演化方程里-d * (e1 - e2)是数据项nu * d * kappa是长度项mu * (lap - kappa)是水平集正则项。nu的取值 0.001 乘以 255 的平方对应灰度 0 到 255 尺度如果图像被归一化到 0 到 1这个值必须缩小 255 的平方倍否则长度项直接碾压数据项。最后cv2.findContours在 OpenCV3 里只返回contours, hierarchy两个值在 OpenCV4 里返回三个值这个差异在后面的避坑章会专门展开。4. 从能跑到跑好sigma、mu、nu、dt 的调参与收敛判据4.1 参数之间的耦合与推荐顺序很多第一次跑 RSF 的人把 sigma 当成“玄学”参数一上来就调半天。实际上参数之间是强耦合的我推荐的顺序是先定 sigma再定 mu最后调 nu同时把 dt 作为稳定性约束。参数推荐初始值影响对象调大调小sigma5.0局部窗口大小轮廓更平滑能容忍更大尺度灰度偏移边缘更细更敏感mu1.0水平集正则强度数值更稳演化更慢演化更快易不规则nu0.001·255²长度惩罚轮廓更圆滑细支被削掉边缘更贴细节dt0.1数值稳定性收敛变快易发散更稳但迭代次数变多sigma 的选择应该参考灰度不均匀的尺度。如果图像里一块组织本身的灰度从一边到另一边变化跨越几十个像素sigma 太小会让局部窗口只能看到同一个灰度带反而把组织拆成几段sigma 太大又退化成全局模型。实际项目中 3 到 10 像素最常用高分辨率大图可以考虑 10 到 20。mu 通常保持在 1 附近不需要频繁调整你只需要知道它是用来替代传统重新初始化过程的mu 越大水平集越像符号距离函数但轮廓推进越慢。nu 是最需要根据实际分割效果调的值目标边缘粗糙就降低 nu目标内部有空洞或边缘破碎就提高 nu。如果前后景灰度差异很大nu 对结果的影响会变小如果图像噪声大nu 的影响就很明显。还有一个容易被忽略的输入尺度问题nu 0.001 * 255 * 255是针对 0 到 255 灰度的。代码里如果把图像做了img / 255.0归一化eps 和 nu 都要同步调整。归一化后 eps 建议从 0.01 起步nu 从 0.001 起步否则 delta 函数作用范围会异常轮廓演化一个月也收不住。4.2 初始化与收敛判据不要让迭代次数成为黑匣子RSF 对初始轮廓不敏感但也不代表随便初始化都能跑。最稳妥的是在目标内部放一个半径略小的圆形或矩形保证初始轮廓既有前景也有背景。完全把初始 phi 放到目标外部也不是不行但需要更多迭代才能让零水平面“爬”进去而且靠近多目标时容易只收敛到局部边缘。另一个工程技巧是拿到粗糙分割结果后直接初始化 phi。比如先用 Otsu 或者手工框一个区域把该区域距离图作为 phi这种方法在医学图像上很常用因为它已经接近真实边界收敛速度和稳定性都好于盲目放圆形。收敛判据不能只看固定迭代次数。最简单有效的做法是监视能量值或者监视phi每次迭代的最大变化量。能量曲线在目标边界附近会先快速下降然后走平如果能量上下跳动或者长时间不降多半是 dt 太大或者 nu 太小。实践中我在演化主循环里每 10 次迭代记录一次max(abs(dphi))连续 20 次低于 0.01 就提前结束否则跑到max_iter300也强行停止。为了防止死循环max_iter仍然是必须保留的。迭代多少步最终取决于图像尺寸和目标尺度小图 100 步左右就能稳定大图 300 步以上也不意外所以收敛判据比固定次数可靠得多。5. RSF 落地的六个常见坑OpenCV3 环境与数值实现里的排查清单5.1 findContours 返回值不一致导致的解包崩溃现象代码在某个环境正常运行换到 Python3.6 OpenCV3 后第一行_, contours, hierarchy cv2.findContours(...)直接报 “too many values to unpack”。原因OpenCV3 的 Python 接口里findContours返回两个值OpenCV4 返回三个值。现在网上大量新教程默认为三返回值老项目里混着两套代码就会翻车。解决在 OpenCV3 环境下统一写contours, hierarchy cv2.findContours(...)。建议在项目入口检测一下cv2.__version__.startswith(3.)写个兼容分支这样即使后续迁移到 OpenCV4 也不会爆。5.2 卷积边界处理让轮廓停在图像边界现象轮廓演化到一半就卡住目标贴近图像边缘时尤其严重边缘部分怎么迭代都推不进去。原因cv2.filter2D的默认边界填充是补零。图像边界外侧被当成强度 0局部拟合 f1、f2 在边界附近被严重拉低或拉高数据项在边界处产生一个假边缘零水平面就停在那里。解决所有卷积统一用borderTypecv2.BORDER_REPLICATE。如果调用了cv2.GaussianBlur做辅助也要注意它的默认边界行为。这个坑在普通图像上不易察觉一旦处理高分辨率医学图像边界影响会被放大。5.3 灰度不归一化让长度项权重翻车现象把从网上抄的nu0.003用在灰度 0 到 255 的图像上发现轮廓变成一团圆数据项完全不起作用反过来把论文里的nu0.003 * 255 * 255用在归一化图像上轮廓又碎成一片。原因RSF 数据项的量纲由合成出的 e1/e2 决定e1/e2 是灰度差的平方。灰度尺度不同数据项大小相差 255 的平方倍而长度项只是曲率积分尺度无关。nu 不随输入尺度缩放数据项和长度项的平衡就被破坏了。解决写一个统一的图像预处理函数入口固定输出灰度范围比如统一归一化到 [0, 1] 或者保持 [0, 255]所有参数都按这个约定传。再强调一次换尺度就要换 eps 和 nu不能只保留一个变量。5.4 除零、NaN 与 delta 函数的数值爆炸现象迭代十几步后phi出现 inf或者掩码全黑全白能量曲线直接变成断崖式跳动。原因局部拟合值分母在某些窗口里接近零。比如初始化轮廓没有覆盖到某个区域该区域内 H 全为零或全为一分母convf(H)接近零f1 或 f2 算出天文数字。另一个原因是 dt 过大数据项的量级远超 1一次更新把 phi 推到不可控范围。解决分母统一加1e-8数据项算完后用np.nan_to_num兜底。dt 从 0.1 开始如果发散就减半同时检查输入图像是否有异常值以及I.astype(np.float64)是否真的转成了浮点。迭代期间每 10 步打印一次 phi 的范围能第一时间发现数值爆炸。5.5 mask 类型或二值范围不对导致轮廓为空现象findContours返回空列表或者画出来的轮廓乱七八糟。原因findContours要求输入是单通道 8 位图像而且轮廓提取对二值化范围有要求。直接传(phi 0).astype(np.uint8)只会得到 0 和 1 两个灰度值虽然也能处理但某些 OpenCV3 版本对 0/1 掩码的轮廓层级处理不友好容易漏掉细碎边缘。解决统一用np.where(phi 0, 255, 0).astype(np.uint8)构造掩码并且在调用前确认不是布尔数组。如果目标是提取多个不相邻区域用cv2.RETR_EXTERNAL只取外轮廓即可内轮廓留给cv2.RETR_TREE。5.6 Python 速度太慢向量化与降采样取舍现象512×512 图像跑 200 次迭代每步要做四五次全图卷积Python 循环加 numpy 加起来可能要好几分钟完全没法用于批量实验。原因RSF 本身计算量大每步卷积的核尺寸随 sigma 增大而增大。Python3.6 环境下又用不了最新 numpy 或 cv2 的优化接口性能瓶颈很明显。解决先用cv2.setUseOptimized(True)并尽量用小 sigma大图先降采样到一半尺寸跑到稳定得到phi后cv2.resize回原尺寸继续精修或者把max_iter分成粗迭代和精迭代两段。这个策略我会在最后一章再展开。6. 用合成图验证 RSFDice、Hausdorff 距离与两阶段提速技巧6.1 合成带乘性偏场的验证图与量化指标验证 RSF 是否真的跑对了最靠谱的方法是造一张已知分割答案的合成图。用真实图像你无法准确判断边界用合成图就能同时看定性效果和定量指标。做法很简单生成一张包含圆、矩形、不规则形状的二值图作为真值乘一个慢变的乘性偏场比如I0 * (1 0.3 * x / width)再加一点高斯噪声。这张图像像素值明明有缓慢漂移但真值掩码是已知的正好测试 RSF 的局部拟合能力。指标方面我建议至少算两个Dice 和 Hausdorff 距离。Dice 能反映重叠率Hausdorff 能反映边界最大偏差。Dice 表示直接比较像素集合Hausdorff 距离则用scipy.ndimage.distance_transform_edt计算每个边界点到真值边界的距离取最大方向。这两个一个看区域性一个看边缘性比只看肉眼效果可靠得多。6.2 两阶段提速技巧与最终交付技巧两阶段策略的核心是先在低分辨率下用较小迭代次数把轮廓位置逼近再把 phi 放大到原始尺寸继续跑。由于水平集函数是连续的cv2.resize(phi, (w, h), interpolationcv2.INTER_LINEAR)放大后虽然梯度分布略有改变但零水平面的位置仍然有效接着跑三五十次就能完成精修。这里要给一个提醒不要直接把原图降采样到低分辨率后轻易调大 sigma因为降采样时图像尺寸缩小了灰度不均匀尺度也缩小了始终保持 sigma 对应的物理尺寸不变才能让低分辨率结果和原图结果一致。我现在的固定习惯是每跑一组实验第一件事打印能量曲线和能量和最大 dphi 的历史确定收敛状态第二件事在合成图上算 Dice 和 Hausdorff 距离第三件事才去看分割结果图。能量图能一眼看出是否发散Dice 是整体正确性Hausdorff 是边界精度。三样都过了这个 RSF 模型才敢拿到真实项目里去替换旧的分割流程。我早年间直接凭肉眼判断效果结果模型换一张图就漏了一半边界后来才养成这套验证顺序。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

ORACLE 关于CURSOR中的FOR UPDATE关键字:从语法到锁行为的完整拆解

ORACLE 关于CURSOR中的FOR UPDATE关键字:从语法到锁行为的完整拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 20:20:08 阅读更多 →
Codex 与 ChatGPT 工作流怎么选:Chat、Work、Codex 的边界和协作示例|TaoToken 统一 Key 接入

Codex 与 ChatGPT 工作流怎么选:Chat、Work、Codex 的边界和协作示例|TaoToken 统一 Key 接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 20:20:08 阅读更多 →
3D视觉模组成本真相:光源与光学元件为何最贵,选型如何避坑

3D视觉模组成本真相:光源与光学元件为何最贵,选型如何避坑

去年做一款散斑结构光模组,BOM成本压到最低时我被一个数字震到了:传感器加上主控,加起来竟然比不过“光源光学元件”那一栏。我反复核了三遍物料清单,确认没看错——一颗VCSEL阵列、一片DOE、一枚窄带滤光片,还没算里面…

2026/10/10 20:20:08 阅读更多 →

最新新闻

YOLOv5 TensorRT Windows DLL工业部署方案

YOLOv5 TensorRT Windows DLL工业部署方案

简介:本资源是面向计算机视觉开发者与嵌入式AI工程师的YOLOv5模型TensorRT加速部署方案,聚焦于Windows平台下高性能目标检测的工程化落地。它提供已编译的DLL动态链接库,封装了YOLOv5模型经TensorRT优化后的推理能力,显著提升边缘…

2026/10/10 21:00:45 阅读更多 →
BiLSTM-Transformer多步时间序列预测:从滑窗构造到工程落地

BiLSTM-Transformer多步时间序列预测:从滑窗构造到工程落地

简介:基于BiLSTM与Transformer编码器融合的多输入多输出时间序列预测项目实例,以单个docx文档形式呈现,面向具备一定编程基础、对深度学习和时间序列建模感兴趣的研发人员、数据科学家与工程师。文档从项目背景、目标意义、复杂多变量时序数据…

2026/10/10 21:00:45 阅读更多 →
Python虚拟环境与PyCharm调试全攻略:从venv到pip避坑指南

Python虚拟环境与PyCharm调试全攻略:从venv到pip避坑指南

我先说个反直觉的事:很多人把 Python 装好、PyCharm 装好之后,第一反应是“赶紧写代码跑起来”,结果没过多久就被环境问题折腾得想砸电脑——明明在自己电脑上跑得好好的程序,换台机器就报 ModuleNotFoundError;在项目…

2026/10/10 21:00:45 阅读更多 →
REA模型实战:用资源、事件、代理搞定业务建模与对账

REA模型实战:用资源、事件、代理搞定业务建模与对账

做业务系统这些年,跟“账对不上”和“业务规则散落各处”这两件事,真的缠斗了很久。手里的项目标题是“rea”,我先说明白,这不是某个新框架的名字缩写,而是我在复盘某订单中台时反复用到的 REA 模型——资源、事件、代…

2026/10/10 21:00:45 阅读更多 →
Mac Sai 测试策略揭秘:862 个测试与「Sandboxed Logic」设计模式,让安全关键代码可 100% 测试

Mac Sai 测试策略揭秘:862 个测试与「Sandboxed Logic」设计模式,让安全关键代码可 100% 测试

【免费下载链接】MacSai Mac Sai: the open-source Mac cleaner, optimizer, and malware scanner. A free, Apple-notarized alternative to CleanMyMac, built with Swift 6 and SwiftUI. 项目地址: https://gitcode.com/gh_mirrors/mac/MacSai 点击查看 免费下载…

2026/10/10 21:00:45 阅读更多 →
信创测试异常场景设计:故障注入与自动化回归实践

信创测试异常场景设计:故障注入与自动化回归实践

做信创测试这几年,最让我意外的从来不是功能跑不通,而是那些只有在异常场景下才冒头的诡异故障。某次适配测试,业务程序在x86环境里连续跑48小时都没事,迁到国产操作系统的ARM服务器后,只要模拟一次突然断电再重启&…

2026/10/10 20:59:44 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →