【Opencv3+Python3入门(11)图像二值化方法】

版权声明:本文为博主原创文章,转载时须注明出处 https://blog.csdn.net/KID_yuan/article/details/89552389

Opencv中封装好了二值化许多方法,例如,全局阈值二值化和局部阈值二值化。二值化方法可以应用在比如图像的前景与背景的分割。

#图像二值化处理
import cv2 as cv
import numpy as np

def threshold_demo(image):
    #局部阈值
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    #cv.THRESH_BINARY|cv.THRESH_OTSU表示将图像二值化,
    #并且选择的方法为OTSU(最大类间方差法),还有许多其他的方法可以选择。
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY|cv.THRESH_OTSU)
    print("threshold value %s"%ret)
    cv.imshow("binary", binary)


def local_threshold(image):
    #自适应阈值
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    binary = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)
    cv.imshow("binary", binary)


def custom_threshold(image):
    #自己设定图像均值为阈值
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    h, w = gray.shape[:2]
    #原图像变成一行
    m = np.reshape(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)
src=cv.imread('F:\OutputResult\SrcImage\saber18.jpg')
print(src.shape)
cv.imshow("Saber",src)
custom_threshold(src)
cv.waitKey(0)
cv.destroyAllWindows()

函数说明:

cv.threshold(src, thresh, maxval, type[, dst])

参数1:src输入数组(多通道、8位或32位浮点)。与src大小、类型和通道数相同的param dst输出数组。

参数2:参数阈值。

参数3:与thresh_binary和thresh_binary_inv阈值一起使用的参数maxval最大值

参数4: 类型。参数类型阈值类型(请参见阈值类型)。如果使用了otsu或三角形方法,则返回计算出的阈值。

cv.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst])

参数1:src源8位单通道图像。dst与src大小和类型相同的dst目标映像。

参数2:为满足条件的像素指定的参数maxvalue非零值

参数3:要使用的参数自适应阈值算法,请参见自适应阈值类型。

参数4:隔离的边界复制用于处理边界。

参数5:参数阈值类型阈值类型必须是阈值二进制或阈值二进制inv,参见阈值类型。

参数6:用于计算阈值的像素邻域的参数块大小,3、5、7等。

参数7:从平均值或加权平均值中减去参数c常数(见下文详情)。通常情况下 为正,但也可以为零或负。

程序结果:

猜你喜欢

转载自blog.csdn.net/KID_yuan/article/details/89552389