基本概念
图像阈值是一种简单、高效的图像分割方法,目的是将图像转换成二值图像。这个过程涉及比较像素值和阈值,根据比较结果来确定每个像素点的状态(前景或背景)。图像阈值在处理二维码、文本识别、物体跟踪等领域中非常有用。本博客旨在简介OpenCV中的阈值处理方法,并提供实现代码,适合初学者学习。
理论介绍:
1. 阈值类型:
- 二进制阈值:如果像素值高于阈值,则赋予一个新值(通常是白色),否则赋予另一个值(通常是黑色)。
- 反二进制阈值:与二进制阈值相反,如果像素值高于阈值,则赋予黑色,否则赋予白色。
- 截断阈值:如果像素值高于阈值,就赋予阈值,否则保持不变。
- 阈值化为零:如果像素值高于阈值,则保持不变,否则赋予零。
- 反阈值化为零:与阈值化为零相反,如果像素值高于阈值,则赋予零,否则保持不变。
2. 自适应阈值:
在不同区域的光照条件不一致的情况下,自适应阈值可以更好地处理图像,它会基于图像上的小区域(邻域)而不是整个图像来计算阈值。
示意图
放大了看看:
把关键的几个放大看看:
程序展示
Python程序
python
# -*- coding: utf-8 -*-
"""
Created on Sat Feb 17 21:26:05 2024
@author: 李立宗
公众号:计算机视觉之光
知识星球:计算机视觉之光
"""
import cv2
# 读取图像
image = cv2.imread('lena.bmp', cv2.IMREAD_GRAYSCALE)
# 应用全局阈值处理
ret, binary_thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# 应用自适应阈值处理
adaptive_thresh = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# 显示原始图像,全局阈值处理结果和自适应阈值处理结果
cv2.imshow('Original Image', image)
cv2.imshow('Binary Threshold', binary_thresh)
cv2.imshow('Adaptive Threshold', adaptive_thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出结果
相关知识点
参考文献
1、OpenCV轻松入门
李立宗,OpenCV轻松入门,电子工业出版社,2023
2、计算机视觉40例
李立宗,计算机视觉40例,电子工业出版社,2022