目录
引言
图像处理是计算机视觉和图像分析的一个重要领域,其中阈值化是一项常用的图像处理技术之一。在OpenCV(Open Source Computer Vision Library)中,提供了许多用于图像处理的函数和工具,其中cv2.threshold
函数用于执行图像阈值化操作。本篇博客将详细介绍cv2.threshold
函数,包括其参数、工作原理以及如何在实际应用中使用它。
什么是图像阈值化?
图像阈值化是一种图像处理技术,它根据图像内像素点强度的分布规律设置一个阈值,然后根据像素点强度高于或低于这个阈值来进行一些处理。简单来说,就是通过设置一个阈值,将图像转换为二值图像,即像素点只有两种可能的强度值(通常是0和255)。这种处理技术可以用来突出图像中的特定区域或特征,例如边缘或纹理,从而简化后续的图像分析和处理步骤。。阈值化还可以用于分割图像中的目标对象,去除噪声,或者强调感兴趣的区域。
cv2.threshold
函数概述
cv2.threshold
函数是OpenCV中用于执行图像阈值化操作的函数之一。它采用图像作为输入,并根据指定的阈值将像素值分成两个类别:小于阈值的像素和大于等于阈值的像素。cv2.threshold()
函数原型如下:
ret, threshold = cv2.threshold(src, thresh, maxval, type)
其中各参数的含义如下:
src
:输入图像,必须是灰度图。thresh
:阈值。maxval
:当像素值超过了阈值(或者小于阈值,取决于阈值类型)所赋予的值。-
type
:阈值化的类型,它指定了像素分类的方式。OpenCV提供了多种不同的阈值化类型,包括:cv2.THRESH_BINARY
:二值化,像素值大于阈值的被赋予maxval
,小于阈值的被赋予0。cv2.THRESH_BINARY_INV
:反二值化,与cv2.THRESH_BINARY
相反,像素值大于阈值的被赋予0,小于阈值的被赋予maxval
。cv2.THRESH_TRUNC
:截断,像素值大于阈值的被赋予阈值,小于阈值的不变。cv2.THRESH_TOZERO
:设置为零,像素值小于阈值的被赋予0,大于阈值的不变。cv2.THRESH_TOZERO_INV
:反设置为零,与cv2.THRESH_TOZERO
相反,像素值小于阈值的不变,大于阈值的被赋予0。cv2.THRESH_OTSU
:这是 Otsu 的二值化方法。这个方法会自动计算最佳阈值,使得两类的类间方差最大。当你使用 Otsu 方法时,设置的阈值(这里是0)会被忽略,Otsu 方法会自动计算一个最佳阈值。
cv2.threshold
函数将返回两个值:
ret
:实际使用的阈值,当使用 Otsu 方法时,这个值是自动计算的阈值threshold
:阈值化后的图像,即像素被分为两个类别的结果。
python代码实现图像阈值化
1.读取图像
- import cv2
- # 读取图像
- image = cv2.imread('image.jpg', 0) # 以灰度模式读取图像
2.使用 cv2.threshold()进行阈值化处理
- # 阈值化操作
- thresh, thresholded = cv2.threshold(image, 220, 255, cv2.THRESH_BINARY)
3.显示原始图像和阈值化后的图像
- # 显示原始图像和阈值化后的图像
- cv2.imshow('Original Image', image)
- cv2.imshow('Thresholded Image', thresholded)
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
4.运行结果展示:
完整代码展示
- import cv2
-
- # 读取图像
- image = cv2.imread('lufei.jpg', cv2.IMREAD_GRAYSCALE) # 以灰度模式读取图像
-
- # 阈值化操作
- thresh, thresholded = cv2.threshold(image, 200, 255, cv2.THRESH_BINARY)
-
- # 显示原始图像和阈值化后的图像
- cv2.imshow('Original Image', image)
- cv2.imshow('Thresholded Image', thresholded)
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
目录
引言
图像处理是计算机视觉和图像分析的一个重要领域,其中阈值化是一项常用的图像处理技术之一。在OpenCV(Open Source Computer Vision Library)中,提供了许多用于图像处理的函数和工具,其中cv2.threshold
函数用于执行图像阈值化操作。本篇博客将详细介绍cv2.threshold
函数,包括其参数、工作原理以及如何在实际应用中使用它。
什么是图像阈值化?
图像阈值化是一种图像处理技术,它根据图像内像素点强度的分布规律设置一个阈值,然后根据像素点强度高于或低于这个阈值来进行一些处理。简单来说,就是通过设置一个阈值,将图像转换为二值图像,即像素点只有两种可能的强度值(通常是0和255)。这种处理技术可以用来突出图像中的特定区域或特征,例如边缘或纹理,从而简化后续的图像分析和处理步骤。。阈值化还可以用于分割图像中的目标对象,去除噪声,或者强调感兴趣的区域。
cv2.threshold
函数概述
cv2.threshold
函数是OpenCV中用于执行图像阈值化操作的函数之一。它采用图像作为输入,并根据指定的阈值将像素值分成两个类别:小于阈值的像素和大于等于阈值的像素。cv2.threshold()
函数原型如下:
ret, threshold = cv2.threshold(src, thresh, maxval, type)
其中各参数的含义如下:
src
:输入图像,必须是灰度图。thresh
:阈值。maxval
:当像素值超过了阈值(或者小于阈值,取决于阈值类型)所赋予的值。-
type
:阈值化的类型,它指定了像素分类的方式。OpenCV提供了多种不同的阈值化类型,包括:cv2.THRESH_BINARY
:二值化,像素值大于阈值的被赋予maxval
,小于阈值的被赋予0。cv2.THRESH_BINARY_INV
:反二值化,与cv2.THRESH_BINARY
相反,像素值大于阈值的被赋予0,小于阈值的被赋予maxval
。cv2.THRESH_TRUNC
:截断,像素值大于阈值的被赋予阈值,小于阈值的不变。cv2.THRESH_TOZERO
:设置为零,像素值小于阈值的被赋予0,大于阈值的不变。cv2.THRESH_TOZERO_INV
:反设置为零,与cv2.THRESH_TOZERO
相反,像素值小于阈值的不变,大于阈值的被赋予0。cv2.THRESH_OTSU
:这是 Otsu 的二值化方法。这个方法会自动计算最佳阈值,使得两类的类间方差最大。当你使用 Otsu 方法时,设置的阈值(这里是0)会被忽略,Otsu 方法会自动计算一个最佳阈值。
cv2.threshold
函数将返回两个值:
ret
:实际使用的阈值,当使用 Otsu 方法时,这个值是自动计算的阈值threshold
:阈值化后的图像,即像素被分为两个类别的结果。
python代码实现图像阈值化
1.读取图像
- import cv2
- # 读取图像
- image = cv2.imread('image.jpg', 0) # 以灰度模式读取图像
2.使用 cv2.threshold()进行阈值化处理
- # 阈值化操作
- thresh, thresholded = cv2.threshold(image, 220, 255, cv2.THRESH_BINARY)
3.显示原始图像和阈值化后的图像
- # 显示原始图像和阈值化后的图像
- cv2.imshow('Original Image', image)
- cv2.imshow('Thresholded Image', thresholded)
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
4.运行结果展示:
完整代码展示
- import cv2
-
- # 读取图像
- image = cv2.imread('lufei.jpg', cv2.IMREAD_GRAYSCALE) # 以灰度模式读取图像
-
- # 阈值化操作
- thresh, thresholded = cv2.threshold(image, 200, 255, cv2.THRESH_BINARY)
-
- # 显示原始图像和阈值化后的图像
- cv2.imshow('Original Image', image)
- cv2.imshow('Thresholded Image', thresholded)
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
评论记录:
回复评论: