ORB特征匹配结合GMS:OpenCV下网格运动统计剔除误匹配实践
简介基于OpenCV 2.4.13的GMS内点筛选算法实践资源面向计算机视觉、特征匹配等方向的学习者与开发者。资源将ORB特征检测与GMS自适应指导过滤策略结合针对两视图匹配中容易产生大量误匹配的问题利用局部一致性约束剔除错误对应保留高质量内点从而提升后续单应矩阵估计、位姿求解等任务的稳健性也减少了RANSAC随机采样阶段的无效迭代。压缩包共60个文件主体为cpp源码、头文件、Visual Studio工程配置、编译生成的exe与中间文件另含测试图片和GMS与RANSAC效果对比图整体仅7.29MB解压后可使用x64/Debug或Release环境直接复现实验。已有596人学习下载。通过这一示例可清晰理解GMS的匹配指导与内点筛选机制、它和RANSAC的互补关系以及在OpenCV 2.4.13中扩展集成第三方算法的工程思路对优化ORB匹配质量具有很强的实践参考价值。1. 为什么需要 GMSORB 匹配的“垃圾堆”里翻出真金子图像拼接、三维重建、视觉里程计里跑 ORB 特征匹配时最头疼的不是提不出特征而是提出来一大片匹配却有一大半是错的。直接用暴力匹配的 ORB误匹配率能高到 30% 以上这可不是玄学而是描述子二值化表达带来的天然缺陷。某实验室的朋友说他们做全景拼接时光靠 RANSAC 过滤重投影误差还是压不下去直到换上了 GMSGrid-based Motion Statistics内点筛选算法匹配精度才真正立起来。这份资源包是在 OpenCV 2.4.13 环境下把 ORB 和 GMS 串起来的完整工程解压后不用改多少代码就能跑出结果。特别适合刚接触视觉特征匹配的从业者也适合想在老代码里快速集成更高精度匹配模块的人。2. ORB 与 GMS 原理网格运动统计的筛选逻辑与参数边界特征匹配的完整链路里特征提取和误匹配剔除是两件独立的事。ORB 负责把关键点和描述子拿出来GMS 负责把错误匹配按进“垃圾堆”。这一章先讲清楚各自的工作原理以及为什么 GMS 能在不依赖几何模型的前提下把内点率提上去。2.1 ORB 特征提取为什么选它而不是 SIFT/SURFSIFT 和 SURF 在尺度不变性上确实比 ORB 强但专利问题和计算量让它们在很多实时场景里站不住脚。ORB 是 oriented FAST rotated BRIEFOpenCV 2.4.13 的接口很稳定构造参数只要调对提取速度能在毫秒级完成。我一般会把nfeatures调到 1500~3000太低匹配对不够GMS 的网格统计会失效太高后面筛选时间跟着涨。描述子用默认的 32 字节 BRIEF匹配距离用汉明距离这在 OpenCV 里已经是约定俗成的用法。有一个容易忽略的点ORB 对图像缩放很敏感。如果两张输入图尺度差异大需要把金字塔层数nlevels加大但代价是内存和时间上升。在低纹理场景里ORB 提不出足够的关键点再好的 GMS 也没办法。下面这一段是提取和匹配的基础代码资源包里的核心逻辑也是从这个结构展开的。#include opencv2/features2d/features2d.hpp #include opencv2/highgui/highgui.hpp #include vector // 构造 ORB 检测器2.4.13 版本构造函数 cv::ORB orb(1500, 1.2f, 8, 15, 0, 2, cv::ORB::HARRIS_SCORE, 31, 20); std::vectorcv::KeyPoint kp1, kp2; cv::Mat desc1, desc2; orb(img1, cv::Mat(), kp1, desc1); orb(img2, cv::Mat(), kp2, desc2); // 暴力匹配使用汉明距离 cv::BFMatcher matcher(cv::NORM_HAMMING); std::vectorcv::DMatch rawMatches; matcher.match(desc1, desc2, rawMatches);逻辑说明这里用 ORB 同时提取两张图的关键点和描述子然后用NORM_HAMMING的 BFMatcher 做一对一匹配。注意matcher.match()返回的是一对一索引不处理一对多的情况。如果后面要接 GMS建议先用knnMatch加比率测试把明显交叉的匹配剔除一部分这样 GMS 的输入质量更高筛选后的内点率也会更漂亮。参数说明构造函数里第一个参数是特征点数量上限scaleFactor为金字塔缩放因子nlevels为金字塔层数。OpenCV 2.4.13 的 ORB 接口里nfeatures不能填 0必须给具体数值。后面几个参数多是边距和 patch 尺寸默认值即可。如果你用的是 OpenCV 3.x 或 4.x构造函数参数类型和顺序都变了要注意区分。2.2 GMS 核心思想把误匹配压到极低的网格统计法GMS 的全称是 Grid-based Motion Statistics for Fast and Ultra-robust Feature Matching。它不依赖单应矩阵或基础矩阵而是利用局部网格中匹配对的空间一致性来判断匹配可靠性。核心假设很直接正确匹配附近会聚拢其他正确匹配错误匹配在空间里是孤立的。算法先把图像划分成G_i x G_j的网格统计每个网格以及周围邻域里匹配对的数量再用一个自适应阈值决定当前匹配是否是内点。整个过程没有迭代所以速度远快于 RANSAC。OpenCV 2.4.13 没有自带 GMS资源包里提供了一套 C 实现。核心函数名我记作gmsMatch它接收两组关键点、原始匹配、图像尺寸、网格数和阈值输出一个布尔类型的 inlier 掩码。调用方式如下std::vectorbool inlierMask; int numInliers gmsMatch(kp1, kp2, rawMatches, img1.size(), img2.size(), inlierMask, 10, 20, 6.0);逻辑说明函数内部把图像划分成 10 列 x 20 行的网格然后对每个匹配对计算所属网格及周围 8 邻域的支持度。inlierMask与rawMatches一一对应true表示该匹配通过筛选。numInliers返回内点总数方便你评估匹配质量。参数说明网格列数和行数分别由第 6、7 个参数给出。我的经验是列数设 10~25行数设 15~30 效果较稳小于 8 会导致筛选失效大于 40 会把正确匹配拆得四分五裂。最后一个参数是自适应阈值4.0~8.0 是常用区间。阈值越小筛选越严格但可能把真匹配一并删掉阈值越大误匹配残留越多。这里补一句算法细节GMS 之所以快是因为它把支持度统计变成了网格内的加法操作而不是对每个匹配做邻域搜索。你可以把图像网格看成一张二维的“投票板”每个正确匹配拉动它所在格子及邻居的票数最后票数过闸门的就是内点。这个思路比 RANSAC 干净也比基于重投影误差的方法更快。2.3 与 RANSAC 的对比GMS 的适用边界RANSAC 是很多人第一反应想到的筛选方案但它有两个硬伤一是必须指定几何模型二是迭代次数不好控制。在纯旋转、小视差或非刚性场景里单应矩阵模型本身就不成立RANSAC 输出的结果自然不可靠。GMS 不依赖模型因此对旋转、缩放、模糊的鲁棒性高一个台阶。但 GMS 也有短板特征点必须是够多且分布均匀。低纹理场景下匹配对不足 300 对GMS 的网格统计就没什么意义了。维度GMSRANSAC几何模型无需指定单应/基础矩阵计算量线性级别快迭代抽样慢纯旋转场景鲁棒容易退化低纹理场景敏感相对稳定主要参数网格数、阈值迭代次数、距离阈值工程上我一般先用 GMS 粗筛再用 RANSAC 精修一次。资源包里的实现只做到了 GMS 这一步但 GMS 输出的是一个DMatch列表直接喂给findFundamentalMat完全没问题。注意findFundamentalMat在 OpenCV 2.4.13 里需要传入vectorPoint2f所以要做一次坐标提取转换。3. 在 OpenCV 2.4.13 上跑通 ORBGMS从解压到出结果资源包解压后核心是源码工程、示例图片以及一份简短说明。编译环境我按 OpenCV 2.4.13 搭配 VS2013 来写Linux 下用 g 或 CMake 也兼容只要链接库名称对应即可。这一章直接给出可运行的示例流程以及调参时的对照关系。3.1 资源包结构与编译环境说明包内源码结构大致是一个主程序文件一个 GMS 实现头文件和源文件以及两张示例图片。工程没有依赖第三方库OpenCV 的 core、imgproc、features2d、highgui 模块就够了。编译时记得开启 C11 支持因为 GMS 实现里用了std::vectorbool和大量 STL 容器C98 下个别编译器会警告。CMakeLists.txt 里只需要声明 find_package(OpenCV REQUIRED)并把它链接到可执行目标上。如果你在 Linux 下装的是 2.4.13OpenCV_INCLUDE_DIRS和OpenCV_LIBS会自动指向对应路径。Windows 下注意把OPENCV_DIR环境变量指到opencv/build目录VS 工程里包含目录和库目录要分别配置好。3.2 关键代码实现ORB 描述子提取与 GMS 筛选完整的主程序流程是读图、提取特征、匹配、GMS 筛选、可视化。这里给出可直接编译的 main 函数骨架把上面的gmsMatch串联起来。#include opencv2/opencv.hpp #include vector #include gms.h int main(int argc, char** argv) { if (argc ! 3) { printf(Usage: orb_gms img1 img2\n); return -1; } cv::Mat img1 cv::imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE); cv::Mat img2 cv::imread(argv[2], CV_LOAD_IMAGE_GRAYSCALE); if (img1.empty() || img2.empty()) { printf(Failed to load images!\n); return -1; } cv::ORB orb(2000, 1.2f, 8, 15, 0, 2, cv::ORB::HARRIS_SCORE, 31, 20); std::vectorcv::KeyPoint kp1, kp2; cv::Mat desc1, desc2; orb(img1, cv::Mat(), kp1, desc1); orb(img2, cv::Mat(), kp2, desc2); cv::BFMatcher matcher(cv::NORM_HAMMING); std::vectorcv::DMatch rawMatches; matcher.match(desc1, desc2, rawMatches); std::vectorbool inlierMask; int numInliers gmsMatch(kp1, kp2, rawMatches, img1.size(), img2.size(), inlierMask, 10, 20, 6.0); std::vectorcv::DMatch goodMatches; for (size_t i 0; i rawMatches.size(); i) { if (inlierMask[i]) goodMatches.push_back(rawMatches[i]); } cv::Mat outImg; cv::drawMatches(img1, kp1, img2, kp2, goodMatches, outImg, cv::Scalar(0, 255, 0), cv::Scalar::all(-1)); cv::imwrite(result.png, outImg); printf(Raw matches: %zu, Inliers: %d\n, rawMatches.size(), numInliers); return 0; }逻辑说明主流程里先用 ORB 提取关键点和描述子再用 BFMatcher 得到原始匹配。gmsMatch会对原始匹配逐个判断把通过筛选的收集到goodMatches中最后用drawMatches把内点连线画到拼接图上。输出到 result.png 后你能直观看到筛选前后的差别。这里的gmsMatch是资源包封装好的函数它的内部实现里会做网格划分和邻域统计。如果你需要调试可以在 gms.cpp 里加打印语句观察每个匹配对的支持度分数这样能精准定位是阈值问题还是网格划分问题。3.3 参数设置什么样的配置出什么样的结果同一组图像参数不同内点数量差别非常大。我整理了一份对照表你可以按这个思路调参。参数推荐值调小的影响调大的影响ORB nfeatures1500~3000匹配对少GMS 统计失效提取慢但内点绝对数增加scaleFactor1.2金字塔层数不变但尺度覆盖差1.1 时更精细速度变慢nlevels8大尺度变换匹配不上内存占用增加小尺度细节更稳GMS 网格列数10~25网格大区分度低网格小正确匹配被孤立GMS 阈值4.0~8.0更严内点少但更纯更松残留误匹配多实际操作时先把 ORB 的特征点数量调到 2000网格列数设为 10行数设为 20阈值先用 6.0 跑一遍。如果内点率低于 40%把阈值降到 4.0如果内点率高于 80%但数量很少说明阈值太严调回 6.0 并增加 ORB 特征点数量。整个调参过程基本是这两步循环。4. 避坑/常见问题排查跑崩了、没点、匹配错乱怎么办GMS 看着简单真正跑起来坑不少。我把自己遇过的问题和身边人踩过的雷整理成下面几条每一条都是“现象 → 原因 → 解决”的结构按顺序排查能省不少时间。4.1 现象编译报错找不到 opencv2/opencv.hpp原因OpenCV 2.4.13 的头文件路径没配好。很多人从 3.x 或 4.x 切过来习惯性只 include opencv2/opencv.hpp但 2.4 版本里这个头文件存在只是你的 include 目录没有指向 opencv 构建目录里的opencv2文件夹。Windows 下经常是因为OPENCV_DIR环境变量还指着旧版本。解决确认 include 目录指向${OPENCV_DIR}/include库目录指向${OPENCV_DIR}/lib。Linux 下用 CMake 的find_package(OpenCV REQUIRED)它会自动拼好路径。如果还报错直接写死绝对路径先跑通再说。4.2 现象GMS 返回的内点数量接近 0原因网格划分太细或者阈值设太小导致正确的匹配也未被支持。另一个常见原因是原始匹配里误匹配占大头GMS 在一堆垃圾里面找不到足够支持。解决先不要动 GMS检查原始匹配的分布。用 drawMatches 输出原始匹配图如果发现大量平行交叉线说明 ORB 提的点有问题比如图像有重复纹理或遮挡。然后降低网格列数到 8阈值降到 4.0重新跑一遍。如果还是 0就检查两张图像是否发生了大幅旋转或缩放此时需要提高 ORB 的 nlevels。4.3 现象GMS 耗时比 RANSAC 还长原因特征点数量过大或者网格设置太小导致统计循环次数太多。另一个隐藏问题是代码里在循环里调用了cv::KeyPoint::convert之类的函数频繁分配内存。解决首先把 ORB 的 nfeatures 降到 1000 以下再看 GMS 函数内部的网格访问逻辑。有些实现里用std::mapint, int做网格索引性能极差。换成二维数组或者std::vectorstd::vectorint会快一个量级。资源包里的实现已经是数组版本如果你改过代码注意别改成 map。4.4 现象特征点集中在图像的一个角落原因ORB 的 FAST 角点检测本身对边缘响应敏感如果图像中有高纹理区域角点会扎堆。GMS 的网格统计对这种分布无能为力因为只有局部网格有支持度其他网格都是空的。解决在提取 ORB 之前先把图像做一次区域直方图均衡化或者对图像分块提取特征。具体做法是先把图像切成 4x4 的小块每块用 ORB 提取部分特征点然后合并。这样能保证特征点在空间上分布均匀GMS 的网格统计才有意义。4.5 现象两张图内容差异很大但 GMS 依然输出很多内点原因这里的“很多内点”其实是误匹配被误判为内点。GMS 的假设是正确匹配在空间上聚集但两张图如果是重复纹理场景比如一个图案重复铺满画面错误匹配也会产生聚集现象。解决这种场景先把原始匹配的比率测试打开也就是用 knnMatch 取最近的前两对比率要小于 0.75 才保留。GMS 的米粒再筛也筛不掉“长得像但位置错”的纹理。如果你做的是拼接或定位任务可以加一个额外的单应矩阵约束比如在 GMS 结果上再跑 RANSAC双保险。5. 进阶把 GMS 封装成通用接口并验证匹配质量资源包里的 GMS 函数是写死的换一个场景就要改参数不方便。我的习惯是把它封装成一个通用结构体把网格数、阈值、是否启用比率测试都作为成员变量这样在图像拼接、SLAM 初始化等多个模块里都能直接复用。封装的关键是把输入输出统一成std::vectorcv::DMatch接口尽量干净。我给出一个简单的封装头文件思路不是完整代码但你照着结构填实现很简单。class OrGmsMatcher { public: OrGmsMatcher(int grid_rows, int grid_cols, float threshold) : rows_(grid_rows), cols_(grid_cols), thr_(threshold) {} std::vectorcv::DMatch run( const cv::Mat img1, const cv::Mat img2, std::vectorcv::KeyPoint kp1, std::vectorcv::KeyPoint kp2) { cv::ORB orb(2000, 1.2f, 8); cv::Mat d1, d2; orb(img1, cv::Mat(), kp1, d1); orb(img2, cv::Mat(), kp2, d2); cv::BFMatcher matcher(cv::NORM_HAMMING); std::vectorcv::DMatch raw; matcher.match(d1, d2, raw); std::vectorbool mask; gmsMatch(kp1, kp2, raw, img1.size(), img2.size(), mask, cols_, rows_, thr_); std::vectorcv::DMatch good; for (size_t i 0; i raw.size(); i) if (mask[i]) good.push_back(raw[i]); return good; } private: int rows_, cols_; float thr_; };验证匹配质量时我常用两个指标内点率和可视化重叠度。内点率是 GMS 返回的内点数量除以原始匹配数量一般大于 50% 就算合格。可视化重叠度需要你自己写几行代码把内点连线的角度直方图画出来正常情况下角度应集中在一个主峰附近杂散角度越少说明筛选越好。封装完成后把它替换到你的工程里注意原代码里对cv::DMatch的依赖要保留。从那以后我每次跑 ORB 匹配都会先用这个封装接口跑一遍然后在必要处加 RANSAC 精修。这些坑都是实际调参数时一个一个踩出来的希望帮到你也希望你下载这份资源包后能少走几步弯路。本文还有配套的精品资源点击获取

相关新闻

Java无参构造方法:对象初始化的隐形基石与框架依赖的枢纽

Java无参构造方法:对象初始化的隐形基石与框架依赖的枢纽

好些人写了好几年 Java,问起“无参构造方法有什么用”,答案就是“能 new 对象”。这个回答不算错,但远远不够。无参构造方法在 Java 里扮演的角色,远不止“实例化入口”这么简单——它是对象初始化链路的第一环,是继承…

2026/10/12 20:02:18 阅读更多 →
Android与Ubuntu基于Socket的实时视频传输实现与H.264解码实战

Android与Ubuntu基于Socket的实时视频传输实现与H.264解码实战

项目做成那天晚上,我盯着手机屏幕上跳动的画面愣了好一会儿:Android手机摄像头采集到的实时画面,经过H.264编码,通过Socket一路打进Ubuntu主机,解码后在电脑上流畅播放。整个过程没有USB线、没有第三方SDK,…

2026/10/12 20:01:17 阅读更多 →
一个人用AI做短视频量产:从口播到漫剧的内容工厂全流程复盘

一个人用AI做短视频量产:从口播到漫剧的内容工厂全流程复盘

这两年我明显感觉到,短视频圈子里的人分成了两拨:一拨还在熬夜想脚本、约拍摄、剪到凌晨三点;另一拨已经用AI把“写稿、出图、配音、剪辑”这一整套流水线跑成了半自动,一个人管三五个号,漫剧、数字人、口播、段子、绘…

2026/10/12 20:01:17 阅读更多 →

最新新闻

VaR五种算法R实现:从历史模拟到Copula-GARCH全解析

VaR五种算法R实现:从历史模拟到Copula-GARCH全解析

简介:金融风险管理中,风险价值(VaR)是衡量投资组合潜在损失的核心指标。这份资料聚焦五种计算VaR的算法,重点利用DCC-GARCH模型与Copula-GARCH模型进行波动率与相依性建模,面向金融工程、量化风控方向的学生…

2026/10/12 22:30:07 阅读更多 →
Linux 上自建 Nacos 集群:从环境准备到高可用验证的完整指南

Linux 上自建 Nacos 集群:从环境准备到高可用验证的完整指南

1. 为什么要在 Linux 上自建 Nacos 集群1.1 从单机到集群:一个绕不开的坎很多团队一开始用 Nacos 都是单机模式,图省事,下载解压启动就完事。开发环境跑得好好的,一到预发或者生产环境,问题就来了:服务注册…

2026/10/12 22:30:07 阅读更多 →
Docker 安装 Jenkins 实战:从环境部署到自动化构建与部署全流程

Docker 安装 Jenkins 实战:从环境部署到自动化构建与部署全流程

最近这段时间一直在折腾持续集成这套东西,起因也很简单:某次发布新版本的时候,我手动打包、传服务器、重启服务,一步接一步,结果到了最后才发现漏了一个配置文件,整个流程又得从头来一遍。那天晚上我就在想…

2026/10/12 22:30:07 阅读更多 →
35kV三段式电流继电保护课程设计:整定计算与仿真全流程

35kV三段式电流继电保护课程设计:整定计算与仿真全流程

“35kV电力系统三段式电流继电保护课程设计仿真报告”,这句话我琢磨了好一阵子。电气专业的学生对这个题目应该都不陌生,它几乎是继电保护课程里绕不开的经典任务。很多人拿到这个题目之后的第一反应不是“我会不会算”,而是“我算这些东西到…

2026/10/12 22:30:07 阅读更多 →
豆瓣评论情感分析与词云实战:SnowNLP 中文 NLP 流水线

豆瓣评论情感分析与词云实战:SnowNLP 中文 NLP 流水线

简介:这份资源面向Python数据挖掘初学者与自然语言处理入门者,围绕豆瓣《肖申克的救赎》评论文本,演示如何调用SnowNLP库完成情感分析,并配合词云与分词处理,帮助读者建立从文本读取、中文分词到情感倾向判定的完整思路…

2026/10/12 22:30:07 阅读更多 →
flannel-v0.11.0 ARM64二进制包:Kubernetes边缘节点CNI确定性部署方案

flannel-v0.11.0 ARM64二进制包:Kubernetes边缘节点CNI确定性部署方案

简介:本资源为 Kubernetes 容器网络插件 Flannel 的 v0.11.0 版本官方二进制发行包,专为 ARM64 架构 Linux 系统编译,适用于在树莓派、国产 ARM 服务器或边缘计算节点上部署 K8s 集群的运维工程师与云原生开发者。压缩包共含 3 个核心文件&am…

2026/10/12 22:29:07 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →