阈值处理

一般使得图像的像素值更单一、图像更简单。阈值可以分为全局性质的阈值,也可以分为局部性质的阈值,可以是单阈值的也可以是多阈值的。

1.全局性的阈值

2.自适应的阈值

通过某种算法分别为不同的区域计算不同的阈值(自适应的阈值),然后再根据每个区域的阈值具体地去处理每个区域

可以看到上述窗口大小使用的为11,当窗口越小的时候,得到的图像越细。想想一下,如果把窗口设置足够大以后(不能超过图像大小),那么得到的结果可能就和第二幅图像的相同了。

binImg = cv2.adaptiveThreshold( img , 1 , cv2.ADAPTIVE_THRESH_MEAN_C , cv2.THRESH_BINARY, 11 , 2 )

该函数需要填6个参数:

  • 原始图像
  • 像素值上限
  • 自适应方法Adaptive Method:
    • cv2.ADAPTIVE_THRESH_MEAN_C :领域内均值
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C :领域内像素点加权和,权 重为一个高斯窗口
  • 值的赋值方法:只有cv2.THRESH_BINARY 和cv2.THRESH_BINARY_INV
  • Block size:规定领域大小(一个正方形的领域)
  • 常数C,阈值等于均值或者加权值减去这个常数(为0相当于阈值 就是求得领域内均值或者加权值)

这种方法理论上得到的效果更好,相当于在动态自适应的调整属于自己像素点的阈值,而不是整幅图像都用一个阈值。

~~     cv2.THRESH_BINARY # 黑白二值
~~     binImg = cv2.adaptiveThreshold(img, 1, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 55, -3)#cv2.bilateralFilter(binImg, 9, 90,16)
~~     #binImg = cv2.GaussianBlur(binImg, (3,3), 0)
~~     #ret, binImg = cv2.threshold(img, 35000, 1, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
~~     plt.imshow(binImg, cmap = 'gray', interpolation = 'bicubic')
~~     plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis

results matching ""

    No results matching ""