🔥关注墨瑾轩,带你探索编程的奥秘!🚀
🔥超萌技术攻略,轻松晋级编程高手🚀
🔥技术宝库已备好,就等你来挖掘🚀
🔥订阅墨瑾轩,智趣学习不孤单🚀
🔥即刻启航,编程之旅更有趣🚀
🧠 什么是固定阈值法?
想象一下你的图像是一块“巧克力蛋糕”,固定阈值法就像用一把“魔法刀”——一刀切!只要像素值大于设定的阈值(比如127),就变成“白色奶油”,否则变成“黑色巧克力”。
核心问题:
- 如何用一把“魔法刀”精准分割图像?
- 为什么有时候“一刀切”会失败?
- 怎样选择合适的阈值类型?
✨ 固定阈值法的5种类型对比
类型 | 效果描述 | 场景示例 |
---|---|---|
THRESH_BINARY |
大于阈值→白色,小于→黑色 | 文档二值化 |
THRESH_BINARY_INV |
大于阈值→黑色,小于→白色 | 反色背景 |
THRESH_TRUNC |
大于阈值→阈值值,小于→原值 | 压缩高亮区域 |
THRESH_TOZERO |
大于阈值→原值,小于→0 | 去除暗区域 |
THRESH_TOZERO_INV |
大于阈值→0,小于→原值 | 提取暗区域 |
🔧 实现方式深度解析
方法1:基础固定阈值法(THRESH_BINARY)
1. 代码模板
using OpenCvSharp;
public class ThresholdExample
{
public static void Main()
{
// 1. 加载图像
Mat src = Cv2.ImRead("input.jpg", ImreadModes.Color);
if (src.Empty())
{
Console.WriteLine("Error: 图像加载失败!");
return;
}
// 2. 转换为灰度图(阈值法必须单通道)
Mat gray = new Mat();
Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY);
// 3. 应用固定阈值分割(THRESH_BINARY)
Mat binary = new Mat();
double thresholdValue = 127; // 阈值
double maxValue = 255; // 最大灰度值
ThresholdTypes type = ThresholdTypes.Binary;
Cv2