上一篇 图像二值化方法--OTSU(最大类间方差法) 留下一个问题:使用库函数
threshold(src, dst, thresh, maxVal, CV_THRESH_OTSU)
来计算阈值,冒出了一个不合群的阈值,原因未知。
分析灰度图,发现光照亮度不均,中间较亮,四周较暗(进行直方图均衡化后更直观)。想把四周较暗的区域作为模板,计算该区域的OTSU阈值,作为整个图像的分割阈值。即把较暗区域的像素点和黑色目标区域的像素点作为对象求其OTSU阈值,这样计算出来的阈值更低。因此,就需要一个带 mask 的计算OTSU阈值的函数。这个想法是学习了以下内容后产生的,该作者改写了原函数。(第一次看到改写原函数,十分感谢原文作者)
thresh = getThreshVal_Otsu_8u(src); 该函数源码在 opencv\sources\modules\imgproc\src\thresh.cpp 中,文章开头的链接中也贴出了。
改写后的函数: