opencv阈值化,opencv 二值化阈值
阈值处理会删除图像中像素值高于或低于特定值的像素。
2.threshold()和cv2.adaptiveThreshold(),用于实现阈值处理。
阈值函数Retval,dst=CV2。Threshold (src,thresh,maxval,type) Retval表示返回的阈值。Dst代表阈值分割结果图像,其大小和类型与原始图像相同。Src表示要设定阈值的图像。它可以是多通道8位或32位浮点值。Thresh表示要设置的阈值。Maxval表示类型参数为THRESH_BINARY或THRESH_BINARY_INV时需要设置的最大值。Type表示阈值分段的类型。
二值化阈值处理(cv2。THRESH_BINARY)二值化阈值处理将原始图像处理成只有两个值的二值图像。
示例:
使用函数cv2.threshold()将数组二进制化:
导入cv2
将numpy作为np导入
img=np.random.randint(0,256,size=[4,5],dtype=np.uint8)
t,rst=cv2.threshold(img,127,255,cv2。THRESH_BINARY)
print(img=\n ,img)
print(t=,t)
Print(rst=\n ,rst)使用函数cv2.threshold()将图像二值化:
导入cv2
img=cv2.imread(lena.bmp )
t,rst=cv2.threshold(img,127,255,cv2。THRESH_BINARY)
cv2.imshow(img ,img)
cv2.imshow(rst ,rst)
cv2.waitKey()
2.cv2。THRESH_BINARY_INV(破坏性窗口()反二值化阈值处理)
使用函数cv2.threshold()对图像执行反二值化阈值处理:
导入cv2
img=cv2.imread(lena.bmp )
t,rst=cv2.threshold(img,127,255,cv2。THRESH_BINARY_INV)
cv2.imshow(img ,img)
cv2.imshow(rst ,rst)
cv2.waitKey()
2.cv2。THRESH_TRUNC,DesroyalWindows()的截断阈值。
使用函数cv2.threshold()对图像进行截断和阈值处理:
导入cv2
img=cv2.imread(lena.bmp )
t,rst=cv2.threshold(img,127,255,cv2。TRUNC)
cv2.imshow(img ,img)
cv2.imshow(rst ,rst)
cv2.waitKey()
2.cv2。THRESH_TOZERO_INV(破坏性地Windows()处理超过阈值的零)
使用函数cv2.threshold()处理阈值为零的图像:
导入cv2
img=cv2.imread(lena.bmp )
t,rst=cv2.threshold(img,127,255,cv2。THRESH_TOZERO_INV)
cv2.imshow(img ,img)
cv2.imshow(rst ,rst)
cv2.waitKey()
2.破坏性地Windows()低阈值零处理(cv2。THRESH_TOZERO)
使用函数cv2.threshold()处理阈值为零的图像。
导入cv2
img=cv2.imread(lena.bmp )
t,rst=cv2.threshold(img,127,255,cv2。THRESH_TOZERO)
cv2.imshow(img ,img)
cv2.imshow(rst ,rst)
cv2.waitKey()
2.cv2.destroyAllWindows()自适应阈值处理图像颜色不平衡。此时,如果仅使用一个阈值,则无法获得清晰有效的阈值分割结果图像。
有一种改进的阈值处理技术,利用变化的阈值来完成图像的阈值处理。这种技术被称为自适应阈值处理。
在阈值处理中,自适应阈值处理方法通过计算每个像素周围相邻区域的加权平均值来获得阈值,并使用该阈值来处理当前像素。与普通阈值处理方法相比,自适应阈值处理能更好地处理明暗差异较大的图像。
函数cv2.adaptiveThreshold()用于实现自适应阈值处理。
Dst=cv。Adaptive Threshold (src,maxvalue,adaptive method,threshold type,block size,c) Dst表示自适应阈值处理结果。Src表示要处理的原始图像。请注意,图像必须是8位单通道图像。MaxValue代表最大值。AdaptiveMethod代表自适应方法。ThresholdType表示阈值处理方法,值必须是cv2之一。THRESH_BINARY或cv2。THRESH_BINARY_INV。Block表示块大小。表示像素在计算阈值时使用的邻域大小,通常为3、5、7等。c是一个常数。函数cv2.adaptiveThreshold()根据参数adaptiveMethod确定自适应阈值的计算方法。该函数包括两种不同的方法:cv2。自适应_阈值_平均值_C和cv2。自适应_阈值_高斯_ c。
在这两种方法中,自适应阈值是逐像素计算的,并且自适应阈值等于由blockSize参数指定的每个像素的邻域的加权平均值减去常数c。
两种不同的方法有不同的方式来计算邻域的加权平均值:
2.CVS _ thresh _ mean _ c:邻域内所有像素的权值一致。2.Adaptive _ thresh _ Gaussian _ C:与邻域内每个像素点与中心点的距离有关,通过高斯方程得到每个点的权值。示例:分别使用二值阈值函数cv2.threshold()和自适应阈值函数cv2.adaptiveThreshold()处理图像。
导入cv2
img=cv2.imread(computer.jpg ,0)
t1,thd=cv2.threshold(img,127,255,cv2。THRESH_BINARY)
athd mean=cv2 . adaptive threshold(img,255,cv2。自适应_阈值_均值_C,cv2。THRESH_BINARY,5,3)
athd gaus=cv2 . adaptive threshold(img,255,cv2。自适应_阈值_高斯_C,cv2。THRESH_BINARY,5,3)
cv2.imshow(img ,img)
cv2.imshow(thd ,thd)
cv2.imshow(athdMEAN ,athdMEAN)
cv2.imshow(athdGAUS ,athdGAUS)
cv2.waitKey()
2.CV2。破坏性地Windows () Otsu处理在使用函数cv2.threshold()进行阈值处理时,需要定义一个阈值,并将这个阈值作为图像阈值处理的基础。通常,处理后的图像是色彩平衡的,因此直接将阈值设置为127更合适。
Otsu法,又称最大类间方差法,是一种基于像素统计的方法。通过统计灰度图像的全局像素分布,选择一个能最大化前景与背景类间方差的阈值,将前景与背景分离。
这种方法对于像素统计中双峰的情况(对应简单背景中单个目标的分割场景)有非常好的效果,但是对于单峰和多峰的情况效果不好,即背景比例不同。
三角形阈值分割
算法特点:几何方法,主要适用于单峰图像。
在OpenCV中,通过传递一个附加参数 cv2。 THRESH_OTSU 到函数cv2.threshold()中参数type的类型,可以实现OTSU模式下的阈值分割。
使用Otsu方法时,将阈值设置为0。这时的函数cv2.threshold()会自动找到最优阈值并返回。
函数cv2.threshold()使用Otsu方法进行阈值分割。
t,Otsu=cv2.threshold (img,0,255,cv2 . thresh _ binary cv 2 . thresh _ Otsu)与普通阈值分割的区别在于:
参数值 cv2。“THRESH_OTSU”被添加到类型参数中。将阈值设置为0。t是由Otsu方法计算和使用的最佳阈值。
注意:如果使用普通阈值分割,返回的阈值是设置的阈值。
例子:一幅图像分别用普通二值化阈值和Otsu阈值进行处理。
导入cv2
img=cv2.imread(tiffany.bmp ,0)
t1,thd=cv2.threshold(img,127,255,cv2。THRESH_BINARY)
t2,otsu=cv2.threshold(img,0,255,cv2。THRESH_BINARY cv2。OTSU)
cv2.imshow(img ,img)
cv2.imshow(thd ,thd)
cv2.imshow(otus ,otsu)
cv2.waitKey()
cv2.destroyAllWindows()
风暴中的白杨
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。