《OpenCV 轻松入门 面向Python》 学习笔记
在使用函数cv.threshold()进行阈值处理时,需要自定义一个阈值,并以此阈值作为图像阈值处理的依据。通常情况下图像都是色彩均衡的,这是直接将阈值设为127是比较合适的。
但是,有时图像灰度级的分布是不均匀的,如果此时还将阈值设值为127,那么阈值处理的结果就是失败的。
如果有一个图像:
[ 123 123 123 123 123 123 123 123 123 123 123 123 126 126 126 123 123 126 126 126 123 123 126 126 126 ] \begin{bmatrix} 123 & 123 & 123 & 123 & 123\\ 123 & 123 & 123 & 123 & 123\\ 123 & 123 & 126 & 126 & 126\\ 123 & 123 & 126 & 126 & 126\\ 123 & 123 & 126 & 126 & 126\\ \end{bmatrix} ???????123123123123123?123123123123123?123123126126126?123123126126126?123123126126126????????
如果此时仍然以127作为阈值,那么图像处理结果就是
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] \begin{bmatrix} 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ \end{bmatrix} ???????00000?00000?00000?00000?00000????????
很显然,真是不合理的,我们可以观察到,如果我们以阈值125进行分割,可以得到较好的效果
[ 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 0 0 255 255 255 0 0 255 255 255 ] \begin{bmatrix} 0 & 0 & 0 & 0& 0\\ 0 & 0 & 0 & 0& 0\\ 0 & 0 & 255 & 255& 255\\ 0 & 0 & 255 & 255& 255\\ 0 & 0 & 255 & 255& 255\\ \end{bmatrix} ???????00000?00000?00255255255?00255255255?00255255255????????
OTSU可以帮我们遍历所有可能的阈值,从而找到最佳的阈值
举例:
t, result_img = cv2.threshold(src_image, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
【python|6.3 阈值处理-- Otsu 处理】具体操作方法是:
- 在普通阈值操作函数cv2.threshold()中,对参数type的类型多传递一个参数cv2.THRESH_OTSU,即可实现Otsu方式的阈值分割
- 必须要把阈值设定为0
- 返回的t是Otsu方法计算得到并使用的最优阈值, 返回值 result_img 是阈值处理后的结果图像
推荐阅读
- 嵌入式硬件|OpenMV激光打靶
- 深度学习|yolov5之魔化修改
- python|python训练一个简单的感知机用于手写数据集识别
- #|人工智能——DBSCAN密度聚类(Python)
- pytorch|【pytorch笔记】(五)自定义损失函数、学习率衰减、模型微调
- 人工智能大数据|聚类模型、聚类分析
- 机器学习|吴恩达机器学习课后作业1——单变量线性回归(Linear regression with one variable)
- 吴恩达机器学习笔记|吴恩达机器学习课后作业——支持向量机
- 吴恩达机器学习笔记|吴恩达机器学习课后作业——KMeans和PCA