您的位置:

深度学习——cv2 二值化技术

一、理论基础

1、二值化的目的是什么?

二值化是将输入图像转换为只有两种亮度值的黑白图像的过程。这是由于黑色和白色是最简单的颜色,黑白图像的信息量较小、易于处理和分析。在图像处理领域,二值化技术被广泛应用于图像增强、分析、识别等任务。

2、基于阈值的二值化方法的原理是什么?

基于阈值的二值化方法是最常用的方法,其基本原理是将像素点的灰度值与一个预先给定的阈值进行比较,大于该阈值的像素灰度值设为最大值255(代表白色),小于该阈值的像素灰度值设为最小值0(代表黑色),从而只保留黑色和白色两种颜色。

3、全局二值化与局部二值化有什么区别?

全局二值化是基于整幅图像的像素灰度值的分布情况确定一个全局阈值,将整幅图像分为黑白两部分。局部二值化则是将图像分成许多小区域,每个小区域计算一个局部阈值,并将该区域内的像素点进行二值化。

4、otsu阈值分割算法是如何工作的?

Otsu阈值分割算法是一种自适用的二值化方法,它会计算灰度图像的全局阈值,使得背景和前景之间的方差最大化。该算法基于灰度直方图,遍历所有可能的阈值,并计算背景和前景的方差。最终算法会选择一个被分割为背景和前景的图像中,方差最大的阈值。

二、代码实现

1、基于阈值的全局二值化方法

import cv2

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 全局阈值二值化方法
ret,thresh1 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

cv2.imshow('global threshold', thresh1)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码中,通过cv2.imread()函数加载一张图片,通过cv2.cvtColor()函数将彩色图像转为灰度图像。然后使用cv2.threshold()函数对灰度图像进行全局二值化处理,并设定阈值为127,二值化方法为cv2.THRESH_BINARY。

2、基于阈值的局部二值化方法

import cv2

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 局部阈值二值化方法
thresh2 = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
cv2.THRESH_BINARY,11,2)

cv2.imshow('adaptive threshold', thresh2)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码中,同样是加载一张图片并将其转化为灰度图像。然后通过cv2.adaptiveThreshold()函数实现局部阈值二值化。其中,参数cv2.ADAPTIVE_THRESH_MEAN_C指定计算局部阈值时,像素点使用的值为相邻区域的平均值。而参数11和2分别表示相邻区域的尺寸和阈值C的大小。

3、Otsu阈值分割算法

import cv2

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# Otsu阈值分割二值化方法
ret, thresh3 = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)

cv2.imshow('Otsu threshold', thresh3)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码通过cv2.threshold()函数实现Otsu阈值分割二值化。其中,参数cv2.THRESH_OTSU表示使用Otsu阈值分割算法确定阈值。注意,在使用Otsu阈值分割算法时,设定阈值的参数无需手动指定,程序会自动计算并选择最优阈值。

三、应用场景

1、字符识别:

在自动化识别、运单条形码等场景中,使用全局或局部阈值二值化方法将图片转为黑白二值图像,可以提高字符识别的准确率。

2、卡片识别:

在银行卡、身份证等卡片识别场景中,往往需要将卡片区域进行二值化处理,在卡片区域轮廓被提取出来之后,可以更快速、准确地识别卡片信息。

四、使用注意事项

1、设定阈值时应根据具体应用场景,选择适合的阈值方法和阈值值。

2、在使用全局阈值二值化方法时,应注意对象和背景的灰度分布情况,以免出现二值化后背景变成前景情况,或者让前景部分出现大片黑色区域。

3、在使用局部阈值二值化方法时,应注意选择相邻区域大小和阈值C的大小,过大或过小都会影响二值化后的效果。

4、在使用Otsu阈值分割算法时,应注意输入图像的质量和清晰度,过暗或过曝的图像可能会影响Otsu阈值分割的效果。

五、总结

本文介绍了基于阈值的二值化技术。首先对二值化技术的目的和基本原理进行了介绍,并对全局二值化、局部二值化、Otsu阈值分割算法进行了详细的讲解。同时,本文结合代码实现和应用场景,对二值化技术的使用注意事项进行了总结。希望本文能够帮助读者更好地理解和应用基于阈值的二值化技术。