本篇将介绍使用OpenCV Python对于图像上的二值化操作,二值化主要用途包括图像分割、物体侦测、文字识别等。这种转换可以帮助检测图像中的物体或特定特征,并提取有用的信息。透过程式码的说明,让各位了解OpenCV Python于图像处理上的基本操作。
将一幅灰度图像转换为黑白图像的过程。它的目标是将灰度图像中的每个像素点分为两个类别:一个是前景(通常是物体或感兴趣的区域),另一个是背景。二值化后的图像中只包含两种值,通常是0和255(或1),分别表示黑色(背景)和白色(前景)。
将图像的每个像素值与一个固定阈值进行比较,将像素值分为两个类别:大于阈值的设为一个值(通常是255),小于阈值的设为另一个值(通常是0)。
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,反之数值不变 |
自适应阈值二值化允许根据图像的局部区域调整阈值。它将图像分为许多小区域,并为每个区域自动计算阈值。这对于处理不均匀光照的图像特别有用。
TRIANGLE?二值化是另一种自动选择阈值的方法,通常适用于单峰分布的图像。它根据直方图的形状选择阈值。
在OpenCV中选择适当的二值化方法和阈值通常取决于图像特性和应用需求。
?
可以先分析图像的特性
以上方的范例图片进行直方图显示,范例图片偏向单峰分布,透过TRIANGLE 二值化可以很明显的前后景区分出来。
透过以上讲解,搭配程式码进行范例讲解,相信各位对于图像上的二值化操作能有更深刻的理解,期待下一篇博文吧!
?
二值化通常应用在灰度图像上,而不是彩色图像,是因为灰度图像只包含亮度信息,它是一种单通道图像,每个像素点的值表示亮度强度,而不考虑颜色信息。在进行二值化时,我们主要关心的是像素的亮度值是否大于或小于阈值,因此使用灰度图像更简单且具有优势。
?
可以使用OpenCV来将原始图像、二值化结果和任何后处理的图像进行可视化,以便比较和分析,或是透过评估指标IoU(Intersection over Union)或Dice系数,用于评估分割的准确性。
?
选择适当的阈值和二值化方法取决于影像的特性和应用需求。您可以通过观察影像的直方图来估计阈值,或者使用自适应阈值方法。不同的应用可能需要不同的阈值和二值化方法,您可以通过试验不同的组合来找到最适合的选择。
对于彩色影像,通常需要将其转换为灰度影像,然后进行二值化处理。可以使用cv2.cvtColor将彩色影像转换为灰度影像,然后选择适当的二值化方法进行处理。在某些情况下,也可以分别处理每个通道的灰度影像,然后组合它们以获得最终的二值化结果。
?
自适应阈值二值化能够应对不同区域的光照变化,使阈值能够根据局部影像特性自动调整。这使其适用于具有不均匀照明的影像,例如文件扫描或工业检测。