OpenCV中的图像二值化

作者:菠萝爱吃肉2024.04.02 19:51浏览量:15

简介:本文将介绍OpenCV库中图像二值化的概念、原理、常用方法以及实际应用场景,帮助读者理解并应用二值化技术。

在数字图像处理中,二值化是一种非常重要的技术,它可以将灰度图像或彩色图像转换为二值图像,即图像中每个像素点的值只有0或255两种可能。OpenCV是一个强大的计算机视觉库,提供了多种二值化的方法。

一、二值化的概念

二值化是将图像中的像素值分为两类,通常是以一个阈值作为分界点。像素值大于或等于阈值的被赋值为一个值(通常是255),像素值小于阈值的被赋值为另一个值(通常是0)。这样就可以得到一个只有黑白两种颜色的图像。

二、OpenCV中的二值化方法

OpenCV提供了多种二值化的方法,包括阈值二值化、自适应阈值二值化、Otsu阈值二值化等。

1. 阈值二值化

阈值二值化是最简单的二值化方法,它使用一个固定的阈值对图像进行二值化。在OpenCV中,可以使用cv2.threshold()函数进行阈值二值化。

  1. import cv2
  2. # 读取图像
  3. img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
  4. # 阈值二值化
  5. ret, binary_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
  6. # 显示二值化后的图像
  7. cv2.imshow('Binary Image', binary_img)
  8. cv2.waitKey(0)
  9. cv2.destroyAllWindows()

在这个例子中,阈值被设置为127,大于或等于127的像素值被赋值为255,小于127的像素值被赋值为0。

2. 自适应阈值二值化

自适应阈值二值化是一种更高级的二值化方法,它根据图像局部区域的像素值来动态计算阈值。在OpenCV中,可以使用cv2.adaptiveThreshold()函数进行自适应阈值二值化。

  1. import cv2
  2. # 读取图像
  3. img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
  4. # 自适应阈值二值化
  5. binary_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
  6. # 显示二值化后的图像
  7. cv2.imshow('Adaptive Binary Image', binary_img)
  8. cv2.waitKey(0)
  9. cv2.destroyAllWindows()

在这个例子中,cv2.ADAPTIVE_THRESH_MEAN_C表示使用局部区域的平均值作为阈值,cv2.THRESH_BINARY表示使用二值化方式,11表示局部区域的大小,2表示从平均值中减去的常数。

3. Otsu阈值二值化

Otsu阈值二值化是一种基于图像直方图的二值化方法,它可以根据图像的统计信息自动选择一个合适的阈值。在OpenCV中,可以使用cv2.threshold()函数并设置cv2.THRESH_OTSU标志进行Otsu阈值二值化。

  1. import cv2
  2. # 读取图像
  3. img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
  4. # Otsu阈值二值化
  5. ret, binary_img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
  6. # 显示二值化后的图像
  7. cv2.imshow('Otsu Binary Image', binary_img)
  8. cv2.waitKey(0)
  9. cv2.destroyAllWindows()

在这个例子中,cv2.THRESH_BINARY + cv2.THRESH_OTSU表示使用Otsu方法进行二值化,阈值ret是由算法自动计算得到的。

三、二值化的应用场景

二值化在图像处理中有许多应用场景,例如: