threshold 函数主要是用于对图形进行二值化,可以令图像灰度大于阈值的,为一个值,低于阈值的,为另一个值。这就可以实现图像的二值化。
threshold(图形,阈值,分配的值,处理模式)
参数:
参数1,需要处理的图像:注意,需要处理的图像需要被转成灰度图像
参数2,阈值:设定阈值,分界值
参数3,分配的值:如果一个像素的灰度值,大于或者小于(取决于参数4的选择)阈值,会被赋予分配的值
参数4,阈值处理模式选择:
cv2.THRESH_BINARY
如果像素值大于阈值,像素值就会被设为参数3
小于等于阈值,设定为0
cv2.THRESH_BINARY_INV
如果像素值大于阈值,像素值为0
小于等于阈值,设定为参数3
cv2.THRESH_TRUNC
如果像素大于阈值,设定为阈值
小于等于阈值,保持原像素值
cv2.THRESH_TOZERO
大于阈值,保持原像素值
小于等于,设定为0
cv2.THRESH_TOZERO_INV
大于阈值,设定为0
小于等于,保持原像素值
输出:
retVal,在这些用法中,可以简单理解为返回输入参数中的阈值。
thresh,返回处理后的图像
例如 :
import imutils
import cv2
width = 800
if __name__ == "__main__":
camera = cv2.VideoCapture(0)
firstFrame = None
while True:
(grabbed, frame) = camera.read()
text = "Unoccupied"
if not grabbed:
break
frame = imutils.resize(frame, width=width)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(frame, (21, 21), 0)
if firstFrame is None:
firstFrame = gray
continue
frameDelta = cv2.absdiff(firstFrame, gray)
thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1]
cv2.imshow("Security Feed", thresh)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
camera.release()
cv2.destroyAllWindows()