OpenCV C++ 简单小技巧 - 阀值 (4

阀值

Mat f1,f2,f3,f4,f5;
threshold(frame, f1, 127, 255, THRESH_BINARY);
threshold(frame, f2, 127, 255, THRESH_BINARY_INV);
threshold(frame, f3, 127, 255, THRESH_TRUNC);
threshold(frame, f4, 127, 255, THRESH_TOZERO);
threshold(frame, f5, 127, 255, THRESH_TOZERO_INV);

阀值第二项255,只对THRESH_BINARY 和 THRESH_BINARY_INV 有效, 越小整体亮度越暗,越大差异越明显

类型 说明 最小 最大
THRESH_BINARY 黑白分离,亮色变白,暗色变黑 白色 黑色
THRESH_BINARY_INV 黑白分离反向,越亮越黑 黑色 白色
THRESH_TRUNC 像从源过渡到黑色渐变一样 黑色 源图像
THRESH_TOZERO 低于阀值变黑,高于阀值保持原色 源图像 黑色
THRESH_TOZERO_INV 低于阀值保持原色,高于阀值变黑 黑色 源图像

偏小


image.png

偏大


image.png
image.png

自适应阀值

Mat f1,f2,f3;
threshold(frame, f1, _s1.value, _s2.value, THRESH_BINARY);
adaptiveThreshold(frame, f2, _s2.value, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 11, 2);
adaptiveThreshold(frame, f3, _s2.value, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 11,2);
image.png

二值化

模糊+二值化可以明显去掉噪点

threshold(frame, f2, _s1.value, _s2.value, THRESH_OTSU);
GaussianBlur(frame, f3, {21,21}, 0);
threshold(f3, f4, _s1.value, _s2.value, THRESH_BINARY+THRESH_OTSU);
image.png
image.png

阀值的作用就是为了简化图像运算,降低运算复杂度,为智能识别提供更优的前期铺垫。

你可能感兴趣的:(OpenCV C++ 简单小技巧 - 阀值 (4)