赞
踩
图像阈值是一种简单、高效的图像分割方法,目的是将图像转换成二值图像。这个过程涉及比较像素值和阈值,根据比较结果来确定每个像素点的状态(前景或背景)。图像阈值在处理二维码、文本识别、物体跟踪等领域中非常有用。本博客旨在简介OpenCV中的阈值处理方法,并提供实现代码,适合初学者学习。
阈值化是图像处理中的一个常见步骤,特别是在图像二值化中使用得非常频繁。二值化是指将图像的像素值只保留两个值,常见的处理方法是将其转变为纯黑和纯白,以简化后续的分析。以下是几种常见的阈值化方法,并对它们进行了一些扩充说明:
在实践中,可以根据具体的图像内容和要解决的问题选用合适的阈值化方法。例如,对于简化图像和提取出最有信息的部分,通常可能会选择二进制阈值或反二进制阈值。而对于想要降低亮度动态范围或只关注特定亮度区间的图像,截断阈值可能会更适用。阈值化为零和反阈值化为零则更多用在需要保留某一亮度区域的情况。在OpenCV等图像处理库中,这些阈值化操作有现成的函数可以直接使用,简化了图像预处理的步骤。
在不同区域的光照条件不一致的情况下,自适应阈值可以更好地处理图像,它会基于图像上的小区域(邻域)而不是整个图像来计算阈值。
示意图如下,这是从参考文献1中截取的图片。
放大了看看:
把关键的几个放大看看:
反二值化阈值处理:
截断阈值化处理:
使用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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。