OpenCV学习笔记-图像二值化

图像的二值化就是将图像上的像素点的灰度值设置为0255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。

图像二值化的类型有以下几种:

0: THRESH_BINARY  当前点值大于阈值时,取Maxval,也就是第四个参数,下面再不说明,否则设置为0

1: THRESH_BINARY_INV 当前点值大于阈值时,设置为0,否则设置为Maxval

2: THRESH_TRUNC 当前点值大于阈值时,设置为阈值,否则不改变

3: THRESH_TOZERO 当前点值大于阈值时,不改变,否则设置为0

4: THRESH_TOZERO_INV  当前点值大于阈值时,设置为0,否则不改变

理论公式:



图像二值化有全局调整、局部自适应和手动计算阈值。
具体代码:

 
 
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

#全局二值化
def threshold_demo(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY |cv.THRESH_TRIANGLE)
    ''' ret: 计算出来的阈值  
       binary: 返回的二值图像  
       cv.THRESH_BINARY |cv.THRESH_OTSU: THRESH_BINARY是将灰度图二值化,THRESH_OTSU是二值化的计算算法  
       计算的方法有很多,一般使用OTSU '''  
   print( 'threshold value %s :' % (ret))
    cv.imshow( 'binary', binary)

#局部自适应
def local_threshold(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)
    ''' adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)
       
        adaptiveMethod: 有两种method ADAPTIVE_THRESH_GAUSSIAN_C和ADAPTIVE_THRESH_MEAN_C,
        个人感觉高斯更好,可以在实际应用中互换试试  
       thresholdType: 二值化的方式 
        blockSize: 最好是奇数,可以防止一些坑  
       C: 偏置值 像素值大于adaptiveMethod的值+10 才会重置为255 '''  
   cv.imshow( 'GAUSSIAN-binary', binary)

#手动计算阈值
def custom_threshold(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    h, w = gray.shape[: 2]
    m = np.resize(gray, [ 1, w*h])
    mean = m.sum() / (w*h)
    print( 'mean : ', mean)
    ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)
    cv.imshow( 'binary', binary)

img = cv.imread( 'img/text1.png')
cv.namedWindow( 'img',cv.WINDOW_AUTOSIZE)
cv.imshow( 'img',img)

local_threshold(img)

cv.waitKey( 0)
cv.destroyAllWindows()

局部自适应的效果图:

参考文章:
https://www.jianshu.com/p/6efd324e8677

http://blog.sina.com.cn/s/blog_154bd48ae0102wboc.html

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/80329364