【基础】基础的图像阈值处理
1. 阈值处理函数
openCV提供cv2.threshold()函数用于图像阈值化处理,其函数格式如下:
retval, dst = cv2.threshold(src, thresh, maxval, type, dst=None)
retval:返回的阈值。dst:阈值分割结果,与原始图像具有相同的大小和类型。src:要进行阈值分割的图像。thresh:设定的阈值。maxval:当像素值超过了阈值(或者小于阈值,根据type来决定)所赋予的值type:代表阈值分割的类型,常用的有:cv2.THRESH_BINARYcv2.THRESH_BINARY_INVcv2.THRESH_TRUNCcv2.THRESH_TOZEROcv2.THRESH_TOZERO_INV
注:INV 即 Inverted 的缩写,表示: 倒转,颠倒,倒置。
2. 阈值二值化(Threshold Binary)
首先指定灰度值的阈值,遍历图像中像素值。
如果像素的灰度值>这个阈值,则将这个像素设置为最大像素值;
若像素的灰度值小于阈值,则将该像素点像素值赋值为0。

小验证:

3. 阈值反二值化(Threshold Binary Inverted)
首先也要指定一个阈值,不同的是在对图像进行阈值化操作时与阈值二值化相反
当像素的灰度值超过这个阈值的时候为该像素点赋值为0;
当该像素的灰度值低于该阈值时赋值为最大值。

小验证:

4. 截断(Truncate)
给定像素值阈值,在图像中像素的灰度值
大于该阈值的像素点被设置为该阈值;
小于该阈值的像素值保持不变。

小验证:

5. 阈值取零(Threshold To Zero)
与截断阈值化相反,
如果像素点的灰度值如果大于该阈值,则像素值不变;
如果像素点的灰度值小于该阈值,则该像素值设置为0。

小验证:

6. 阈值反取零(Threshold To Zero Inverted)
像素值大于阈值的像素赋值为0,而小于该阈值的像素值则保持不变,

小验证:

7. 程序演示
"""
Author: Will Wang
Email: WillWang1998@163.com
"""
import cv2
import numpy as np
gray = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
gray = cv2.resize(gray, (350, 350))
retval1, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
retval2, binaryinv = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
retval3, trunc = cv2.threshold(gray, 127, 255, cv2.THRESH_TRUNC)
retval4, tozero = cv2.threshold(gray, 127, 255, cv2.THRESH_TOZERO)
retval5, tozeroinv = cv2.threshold(gray, 127, 255, cv2.THRESH_TOZERO_INV)
image_stack1 = np.hstack((gray, binary, binaryinv))
image_stack2 = np.hstack((trunc, tozero, tozeroinv))
cv2.imshow('gray, binary, binaryinv', image_stack1)
cv2.imshow('trunc, tozero, tozeroinv', image_stack2)
cv2.waitKey(0)
cv2.destroyAllWindows()
