OpenCV之阈值化操作总结

参考:https://blog.csdn.net/sinat_21258931/article/details/61418681

在做图像处理时,阈值化(二值化)是一个非常常见的操作,其中最关键的是阈值的选择,会直接影响到阈值化效果,本文对opencv常见的阈值化操作进行总结。

1 固定阈值

如果说图像质量较好,目标和背景容易区分,可以选择固定阈值来进行二值化,用到的函数是threshold()

函数原型

ret, dst = cv2.threshold(src, thresh, maxval, type)

其中:

  • src: 输入图,只能输入单通道图像,通常来说为灰度图
  • dst: 输出图
  • thresh: 阈值
  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  • type:二值化操作的类型,包含以下5种类型:
阈值类型操作
cv2.THRESH_BINARYDST=(SRC>thresh) ? MAXVALUE:0
cv2.THRESH_BINARY_INVDST=(SRC>thresh) ? 0:MAXVALUE
cv2.THRESH_TRUNCDST=(SRC>thresh) ? THRESH:SRC
cv2.THRESH_TOZERODST=(SRC>thresh) ? SRC:0
cv2.THRESH_TOZERO_INVDST=(SRC>thresh) ? 0:SRC

上边的type很好理解,比如第一个cv2.THRESH_BINARY表示当像素值大于设定的阈值时置为MAXVALUE,否则置为0

2 自适应阈值

上边固定阈值的方法适用于比较理想的场景,实际在使用时,由于图片的光线条件变化,固定的阈值往往不能很好的将目标与背景分离,这个时候就需要用到自适应阈值的方法,自适应阈值会根据一小片区域的值来动态调整阈值,使最后的输出更合理。用到的函数是adaptiveThreshold()

函数原型

dst = cv2.adaptiveThreshold(src, maxval, thresh_type, type, Block Size, C)

这个函数的作用是通过计算每个像素位置周围的b x b区域的加权平均值,然后减去常数C,其中b由Block Size给定,要设置为奇数,其中,dst、src、maxval、type与固定阈值函数threshold()中含义相同,其余参数含义如下:

  • thresh_type: 阈值的计算方法,包含以下2种类型:
类型含义
cv2.ADAPTIVE_THRESH_MEAN_C计算均值时每个像素的权值是相等的
cv2.ADAPTIVE_THRESH_GAUSSIAN_C计算均值时每个像素的权值根据其到中心点的距离通过高斯方程得到
  • Block Size: 图片中分块的大小
  • C :阈值计算方法中的常数项

关于Block Size和C的取值,一般Block Size取3~17比较合适,C也不宜太大,可取3~9,具体的值需要自己测试调节。

下图为对一幅图片用不同方法进行阈值化时的效果,可以看到,相对于一般的阈值化操作,当图像中出现较大的明暗差异时,自适应阈值是非常有效的

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页