目录
2、阈值反二值化(Threshold Binary Inverted)
5、阈值反取零(Threshold to Zero Inverted)
一、概述
图像阈值处理是一种常用的图像处理技术,其目的主要是将图像转换为二值图像,简化图像分析和处理的复杂度。这种处理方法基于像素的亮度,通过设定一个阈值,将图像中的像素划分为两类,通常是黑色和白色。阈值化的重要性在于,它能有效地进行图像目标物体的分割,将目标对象与背景分割开来。在计算机视觉应用中,这种二值化技术占据了极其重要的位置。选择合适的阈值化技术是进行二值化的关键。
二、如何进行图像二值化?
图像二值化是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。
ret, dst = cv2.threshold(src, thresh, maxval, type)
可以使用上述函数对图像进行二值化操作,其中各参数含义如下:
src
:输入图像,必须为单通道灰度图像。thresh
:阈值,用于与每个像素点的灰度值进行比较。maxval
:当像素点的灰度值大于或等于阈值时,将其设置为该值。type
:阈值类型,指定如何根据比较结果设置像素点的值。ret
: 这是一个输出参数,它返回实际使用的阈值。binary
: 这是一个输出图像,其中所有像素值都已根据给定的阈值进行了二值化处理。
三、实际案例演示(基本阈值分类)
image = cv2.imread('123.png',cv2.IMREAD_GRAYSCALE) #读取图像并转换为灰度图像
cv2.imshow('sd',image)
cv2.waitKey(1000)
cv2.destroyAllWindows()
ret,binary = cv2.threshold(image,175,255,cv2.THRESH_BINARY) #阈值二值化
cv2.imshow('binary',binary)
cv2.waitKey(1000)
ret1,binaryinv = cv2.threshold(image,175,255,cv2.THRESH_BINARY_INV)
ret2,trunc = cv2.threshold(image,175,255,cv2.THRESH_TRUNC)
ret3,tozero = cv2.threshold(image,175,255,cv2.THRESH_TOZERO)
ret4,tozeroinv = cv2.threshold(image,175,255,cv2.THRESH_TOZERO_INV)
#显示二值化图像
cv2.imshow('original',image)
cv2.waitKey(1000)
cv2.imwrite('101.png',image)
cv2.imshow('binary',binary)
cv2.waitKey(1000)
cv2.imshow('binaryinv',binaryinv)
cv2.waitKey(1000)
cv2.imshow('trunc',trunc)
cv2.waitKey(1000)
cv2.imshow('tozero',tozero)
cv2.waitKey(1000)
cv2.imshow('tozeroinv',tozeroinv)
cv2.waitKey(1000)
上述代码是对图片进行阈值分割的完整展示
首先,原始图像如下所示:
通过 OpenCV库中的IMREAD_GRAYSCALE
函数将其转为灰度图,进行下一步阈值分割操作。本案例将阈值设为175,图像最大值为255,阈值大小可针对实际图像进行改动。
1、阈值二值化(Threshold Binary)
大于阈值的像素点设置为最大值,小于阈值的像素点设置为0。
图像效果:
2、阈值反二值化(Threshold Binary Inverted)
大于阈值的像素点设置为0,小于阈值的像素点设置为最大值。
图像效果:
3、截断(Truncate)
大于阈值的像素点设置为阈值,小于阈值的像素点保持不变。
图像效果:
4、阈值取零(Threshold to Zero)
小于阈值的像素点设置为0,大于阈值的像素点保持不变。
图像效果:
5、阈值反取零(Threshold to Zero Inverted)
大于阈值的像素点设置为0,小于阈值的像素点保持不变。
图像效果:
四、总结
虽然固定阈值和自适应阈值可以解决很小一部分的问题,但是在现实生活和实际的科学研究中的复杂图像的二值化是几乎不可能用简单的阈值分割来解决的。