阈值处理与区域分割
在图像处理中,我们希望把通过物体的所在位置,把图像分成若干个特定的区域,从而达到区域分割的目的。阈值处理通过剔除高于或低于区域物体像素值的方法来达到这一目的。通过灰度信息提取前景,在前景物体与背景对比度较强时,效果明显。而对比度较弱时,可以先增强对比度再进行阈值处理。处理以后的图像为二值图像,因此也被称为二值化处理。在阈值处理中一般有全局阈值处理和局部阈值处理两种方法
全局阈值处理
全局阈值处理一般有两种处理方法,其一是将灰度值大于设定阈值的像素点设为255(白色),将小于等于阈值的设为0(黑色);其二是反过来,将灰度值大于设定阈值的像素点设为0(黑色),将小于等于阈值的设为255(白色)。
二值化阈值处理
import cv2 as cv
image = cv.imread("lena.jpg", cv.IMREAD_GRAYSCALE)
ret, dst = cv.threshold(image, 127, 255, cv.THRESH_BINARY)
cv.imshow("image", image)
cv.imshow("threshold", dst)
cv.waitKey()
cv.destroyAllWindows()


反二值化阈值处理
import cv2 as cv
image = cv.imread("lena.jpg", cv.IMREAD_GRAYSCALE)
ret, dst = cv.threshold(image, 127, 255, cv.THRESH_BINARY_INV)
cv.imshow("image", image)
cv.imshow("threshold", dst)
cv.waitKey()
cv.destroyAllWindows()

截断阈值处理
import cv2 as cv
image = cv.imread("lena.jpg", cv.IMREAD_GRAYSCALE)
ret, dst = cv.threshold(image, 127, 255, cv.THRESH_TRUNC)
cv.imshow("image", image)
cv.imshow("threshold", dst)
cv.waitKey()
cv.destroyAllWindows()
当像素值大于设定的阈值时,将该点的像素值改为阈值;当像素值小于或等于设定的阈值时,改点的像素值不发生变化。

超阈值零处理
当像素值大于设定的阈值时,将该点的像素值设为0;小于或等于阈值时,像素值不变化。
import cv2 as cv
image = cv.imread("lena.jpg", cv.IMREAD_GRAYSCALE)
ret, dst = cv.threshold(image, 127, 255, cv.THRESH_TOZERO_INV)
cv.imshow("image", image)
cv.imshow("threshold", dst)
cv.waitKey()
cv.destroyAllWindows()

低阈值零处理
当像素值小于或等于设定的阈值时,将该点的像素值设为0;大于阈值时,像素值不变化。
import cv2 as cv
image = cv.imread("lena.jpg", cv.IMREAD_GRAYSCALE)
ret, dst = cv.threshold(image, 127, 255, cv.THRESH_TOZERO)
cv.imshow("image", image)
cv.imshow("threshold", dst)
cv.waitKey()
cv.destroyAllWindows()

重要代码展示
ret, dst = cv.threshold(src, thresh, maxval, type)
- ret:阈值大小
- dst:输出图像
- src:原图像
- thresh:阈值
- maxval:设定的最大值。在显示二值图像时,一般设为255.
- type:阈值分割的方法。
版权声明:本文为bubid原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。