► 前言

本篇将介绍使用OpenCV Python对于图像上的二值化操作,二值化主要用途包括图像分割、物体侦测、文字识别等。这种转换可以帮助检测图像中的物体或特定特征,并提取有用的信息。透过程式码的说明,让各位了解OpenCV Python于图像处理上的基本操作。

► 二值化定义

将一幅灰度图像转换为黑白图像的过程。它的目标是将灰度图像中的每个像素点分为两个类别:一个是前景(通常是物体或感兴趣的区域),另一个是背景。二值化后的图像中只包含两种值,通常是0和255(或1),分别表示黑色(背景)和白色(前景)。

►固定阈值二值化(Thresholding)

将图像的每个像素值与一个固定阈值进行比较,将像素值分为两个类别:大于阈值的设为一个值(通常是255),小于阈值的设为另一个值(通常是0)。

python 反二值化 python opencv二值化_python 反二值化

cv2.THRESH_BINARY

# 如果大于 127 就等于 255,反之等于 0

cv2.THRESH_BINARY_INV

# 如果大于 127 就等于 0,反之等于 255

cv2.THRESH_TRUNC

# 如果大于 127 就等于 127,反之数值不变

cv2.THRESH_TOZERO

# 如果大于 127 数值不变,反之数值等于 0

cv2.THRESH_TOZERO_INV

# 如果大于 127 等于 0,反之数值不变

python 反二值化 python opencv二值化_开发语言_02

►自适应阈值二值化(Adaptive Thresholding)

自适应阈值二值化允许根据图像的局部区域调整阈值。它将图像分为许多小区域,并为每个区域自动计算阈值。这对于处理不均匀光照的图像特别有用。

python 反二值化 python opencv二值化_开发语言_03

python 反二值化 python opencv二值化_开发语言_04

►Otsu's 二值化

python 反二值化 python opencv二值化_opencv_05

python 反二值化 python opencv二值化_opencv_06

►TRIANGLE 二值化

TRIANGLE 二值化是另一种自动选择阈值的方法,通常适用于单峰分布的图像。它根据直方图的形状选择阈值。

python 反二值化 python opencv二值化_开发语言_07

python 反二值化 python opencv二值化_python 反二值化_08

►选择适当的二值化方法和阈值

在OpenCV中选择适当的二值化方法和阈值通常取决于图像特性和应用需求。
 

可以先分析图像的特性

  • 图像的亮度分布是单峰分布还是多峰分布?
  • 图像是否受到噪声的影响?
  • 图像中的物体是深色物体对比亮背景,还是亮色物体对比暗背景?
  1. 如果图像的亮度分布相对均匀,可以使用固定阈值二值化进行二值化操作,通过观察图像直方图来估计一个适当的阈值。
  2. 如果图像的光照不均匀或受到阴影影响,可以使用自适应阈值二值化,自适应阈值二值化,可以在不同区域使用不同的阈值,以适应局部光照变化。
  3. 如果要自动选择阈值,可以使用Otsu's 二值化或TRIANGLE 二值化方法根据图像的灰度分布自动选择最佳阈值。
     

以上方的范例图片进行直方图显示,范例图片偏向单峰分布,透过TRIANGLE 二值化可以很明显的前后景区分出来。

python 反二值化 python opencv二值化_大大通_09

python 反二值化 python opencv二值化_python 反二值化_10

►小结

透过以上讲解,搭配程式码进行范例讲解,相信各位对于图像上的二值化操作能有更深刻的理解,期待下一篇博文吧!
 

►Q&A

 问题一:二值化为甚么要灰度图?

二值化通常应用在灰度图像上,而不是彩色图像,是因为灰度图像只包含亮度信息,它是一种单通道图像,每个像素点的值表示亮度强度,而不考虑颜色信息。在进行二值化时,我们主要关心的是像素的亮度值是否大于或小于阈值,因此使用灰度图像更简单且具有优势。
 

问题二:在OpenCV中如何评估和调整二值化的效果?

可以使用OpenCV来将原始图像、二值化结果和任何后处理的图像进行可视化,以便比较和分析,或是透过评估指标IoU(Intersection over Union)或Dice系数,用于评估分割的准确性。
 

问题三:如何选择适当的阈值和二值化方法?

选择适当的阈值和二值化方法取决于影像的特性和应用需求。您可以通过观察影像的直方图来估计阈值,或者使用自适应阈值方法。不同的应用可能需要不同的阈值和二值化方法,您可以通过试验不同的组合来找到最适合的选择。

问题四:如何处理彩色影像的二值化?

对于彩色影像,通常需要将其转换为灰度影像,然后进行二值化处理。可以使用cv2.cvtColor将彩色影像转换为灰度影像,然后选择适当的二值化方法进行处理。在某些情况下,也可以分别处理每个通道的灰度影像,然后组合它们以获得最终的二值化结果。
 

问题五:自适应阈值二值化的优势是什么?

自适应阈值二值化能够应对不同区域的光照变化,使阈值能够根据局部影像特性自动调整。这使其适用于具有不均匀照明的影像,例如文件扫描或工业检测。

►参考资料    

OpenCV - Open Computer Vision Library