OpenCV 阈值分割基础
586 字
3 分钟
OpenCV 阈值分割基础
OpenCV 阈值分割基础
阈值分割适合把灰度图按亮暗分成前景和背景。它简单、直观,但前提是目标和背景在灰度上确实有差异。
如果光照变化很大,固定阈值往往不稳定,需要考虑自适应阈值或先做预处理。
固定阈值
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)_, mask = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)cv2.imwrite("mask.png", mask)返回值里的第一个值是实际阈值,第二个才是二值图。
Otsu 自动阈值
threshold, mask = cv2.threshold( gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)print("otsu threshold", threshold)Otsu 适合前景和背景灰度分布比较分开的情况。
自适应阈值
mask = cv2.adaptiveThreshold( gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 21, 5,)局部光照差异明显时,自适应阈值比全局阈值更稳。
结果检查
-
前景是否被完整保留。
-
背景噪声是否过多。
-
黑白是否反了,必要时使用
THRESH_BINARY_INV。 -
阈值前是否需要模糊降噪。
实战复盘
复用《OpenCV 阈值分割基础》时,我会先用三到五张图片跑通流程,再扩大到完整数据集。小样本阶段要故意覆盖正常图、边界图和可能失败的图,而不是只选最干净的样本。
OpenCV 和 YOLO 相关步骤都要特别关注坐标和尺寸。图片数组常用高宽顺序,检测框常用 x/y 顺序,YOLO 又使用归一化中心点坐标,混用后不会总是报错,但结果一定会偏。
后续如果要写成更完整教程,可以补充输入目录结构、输出目录结构和一张可视化样例,让读者能直接对照自己的项目。
最小验收样例
验收《OpenCV 阈值分割基础》时,我会固定三张图片:一张正常样例、一张边界样例、一张容易失败的样例。每次改代码都用这三张图跑一遍,并保存输出结果。
视觉流程的验收必须能用眼睛确认。只打印数组 shape 或命令成功不够,至少要保存一张中间结果图或最终可视化图,确认处理效果和预期一致。
小结
阈值分割的关键是看图,不是只看代码。每次调整阈值后都要保存 mask,确认它真的分出了目标。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!













