【学习OpenCV4】阈值化总结

本文分享内容来自图书《学习OpenCV 4:基于Python的算法实战》,该书内容如下:

1章 OpenCV快速入门;
第2章 图像读写模块imgcodecs;
第3章 核心库模块core;
第4章 图像处理模块imgproc(一);
第5章 图像处理模块imgproc(二);
第6章 可视化模块highgui;
第7章 视频处理模块videoio;
第8章 视频分析模块video;
第9章 照片处理模块photo;
第102D特征模块features2d;
第11章 相机标定与三维重建模块calib3d;
第12章 传统目标检测模块objdetect;
第13章 机器学习模块ml;
第14章 深度神经网络模块dnn

欢迎关注图书《深度学习计算机视觉实战》与《学习OpenCV4:基于Python的算法实战》。
在这里插入图片描述

在图像处理过程中,经常需要根据像素值高于或者低于一个像素值做出决定,将高于或者低于这一像素值的像素置零同时将其他像素保持不变,这种操作可以通过阈值化实现,OpenCV中提供了基本阈值化和自适应阈值化两种方式。

5.5.1 案例53:基本阈值化

OpenCV中基本阈值化操作的函数为threshold,该函数的定义如下:

dst = threshold(src, thresh, maxval, type, dst=None)

参数说明如下:
src,输入图像;
thresh,设定的阈值;
maxval,参数type为THRESH_BINARY或者THRESH_BINARY_INV时的最大值;
type,阈值类型,由ThresholdTypes定义(见4.1节);
dst,输出图像(返回值)。
可以通过设置阈值类型type计算不同类型的阈值,阈值类型设置为THRESH_BINARY(二值阈值)的案例代码如下:

import cv2

src = cv2.imread("src.jpg", cv2.IMREAD_GRAYSCALE)
#应用二值阈值
_, thresh_bin = cv2.threshold(src, 128, 255, cv2.THRESH_BINARY)
cv2.imshow("thresh_bin", thresh_bin)
cv2.waitKey(0)
cv2.destroyAllWindows()

type设置为THRESH_BINARY后,阈值化后输入图像中像素值高于阈值的被设置为最大值maxval,低于阈值的设置为0,二值阈值后的结果如图5.13所示。
在这里插入图片描述
图5.13

读者可以设置ThresholdTypes定义的其他阈值类型,如果阈值类型type设置为THRESH_BINARY_INV,阈值化后输入图像中像素值高于阈值的被设置为像素值0,低于阈值的设置为maxval,THRESH_BINARY_INV阈值化后的结果如图5.14所示。
在这里插入图片描述

图5.14
如果阈值类型type设置THRESH_TRUNC,阈值化后输入图像中像素值高于阈值的被设置为阈值,低于阈值的设置为像素值0,THRESH_TRUNC阈值化后的结果如图5.15所示。
在这里插入图片描述
图5.15
其他阈值化类型就不做一一展示,有兴趣的读者可以自行修改阈值类型type进行尝试。

5.5.2 案例54:自适应阈值化

基本阈值化需要读者手动设置阈值进行阈值化操作,阈值的设置需要尝试选出最佳值,自适应阈值化则可以变化阈值完成阈值化操作,OpenCV中提供了自适应阈值化操作的函数adaptiveThreshold,函数的定义如下:

dst = adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

参数说明如下:
src,输入图像,需传入单通道图像;
maxValue,分配给满足条件的像素的非零值像素值;
adaptiveMethod,自适应算法,由AdaptiveThresholdTypes定义(见4.1节);
thresholdType ,阈值类型;
blockSize,计算阈值的邻域尺寸;
C,减去平均值或者加权平均值之后的常数值;
dst,输出图像(返回值)。
自适应阈值化可以使用的自适应算法包括两种:平均法(ADAPTIVE_THRESH_MEAN_C)和高斯法(ADAPTIVE_THRESH_GAUSSIAN_C),两种算法的自适应阈值化的案例代码如下:

import cv2

#读取灰度图
src = cv2.imread("src.jpg", cv2.IMREAD_GRAYSCALE)
#平均法自适应阈值
thresh_mean = cv2.adaptiveThreshold(src, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 0)
#高斯法自适应阈值
thresh_gaussian = cv2.adaptiveThreshold(src, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 0)
#图像显示
cv2.imshow("thresh_mean", thresh_mean)
cv2.imshow("thresh_gaussian", thresh_gaussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

平均法自适应阈值的输出结果如图5.16所示。
在这里插入图片描述
图5.16
高斯法自适应阈值的输出结果如图5.17所示。
在这里插入图片描述

图5.17

猜你喜欢

转载自blog.csdn.net/lxiao428/article/details/123171152