opencv-python库 cv2图像二值化详解

文章目录

图像二值化原理

图像二值化原理是通过设定一个阈值,将图像中的像素点的灰度值与阈值进行比较,大于阈值的像素点设置为白色,小于阈值的像素点设置为黑色

1。图像二值化是将彩色或灰度图像转换为只包含两种颜色(通常是黑色和白色)的二值图像的过程1。

图像二值化通常分为自适应二值化、定阈二值化、OTSU算法等。定阈二值化是用户把整幅图像上的每个像素点的灰度值设定为某一阈值,当灰度值大于该阈值时,其灰度值被视为"1",如果小于该阈值,其灰度值被视为"0",从而实现了图像二值化2。

cv2.threshold()

cv2.threshold 是 OpenCV(一个开源的计算机视觉库)中的一个函数,用于对图像进行阈值处理,也就是将图像转换为二值图像。这个函数特别适用于那些需要明确区分前景和背景的情况,例如,当你想要检测图像中的某个物体时。

函数原型

python 复制代码
cv2.threshold(src, thresh, maxval, type[, dst])

参数说明

  • src:输入图像,通常是一个灰度图像。阈值处理通常在灰度图像上进行,因为灰度图像只有一个通道,处理起来比较简单。
  • thresh:阈值。这是一个用于分类像素值的参数。所有小于 thresh 的像素值都会被赋予一个新的值(通常是 0),而所有大于或等于 thresh 的像素值都会被赋予另一个值(通常是 maxval)。
  • maxval:当像素值超过阈值时,所赋予的值。在二值化的情况下,这通常是 255(白色)。
  • type:阈值类型,决定了如何处理像素值与阈值之间的关系。OpenCV 提供了多种阈值类型,如:
    • cv2.THRESH_BINARY:二值化阈值化。所有大于 thresh 的像素值设为 maxval,小于等于 thresh 的像素值设为 0。
    • cv2.THRESH_BINARY_INV:反二值化阈值化。所有大于 thresh 的像素值设为 0,小于等于 thresh 的像素值设为 maxval。
    • cv2.THRESH_TRUNC:截断阈值化。所有大于 thresh 的像素值设为 thresh,小于等于 thresh 的像素值不变。
    • cv2.THRESH_TOZERO:阈值化为 0。所有大于 thresh 的像素值不变,小于等于 thresh 的像素值设为 0。
    • cv2.THRESH_TOZERO_INV:反阈值化为 0。所有大于 thresh 的像素值设为 0,小于等于 thresh 的像素值不变。
  • dst:输出图像,是一个可选参数。如果提供了这个参数,函数会将结果存储在这个图像中,而不是创建一个新的图像。

使用示例

python 复制代码
import cv2

# 读取图像并转换为灰度图像
image = cv2.imread('path_to_your_image.jpg', cv2.IMREAD_GRAYSCALE)

# 应用阈值处理
ret, thresholded_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

# 显示原始图像和阈值化后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Thresholded Image', thresholded_image)

# 等待按键并关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,我们读取了一个图像,将其转换为灰度图像,然后应用了二值化阈值处理。ret 变量存储了使用的阈值,而 thresholded_image 是阈值处理后的图像。最后,我们显示了原始图像和阈值化后的图像。

Qtsu二值化

在OpenCV中,cv2.threshold 函数用于对图像进行阈值处理。当您使用 cv2.THRESH_BINARY 与 cv2.THRESH_OTSU 结合时(使用位运算符 | 来组合它们),这意味着您想使用大津算法(Otsu's method)来自动计算一个最优阈值,并将图像二值化。

使用 | 符号来组合 cv2.THRESH_BINARY 和 cv2.THRESH_OTSU 意味着您希望同时应用这两种操作:二值化图像并使用Otsu's 方法计算阈值。

下面是一个Python代码示例,展示了如何使用 cv2.threshold 函数和Otsu's 方法:

python 复制代码
import cv2

# 读取图像并转换为灰度图像
gray_img = cv2.imread('path_to_your_image.jpg', cv2.IMREAD_GRAYSCALE)

# 使用Otsu's 方法计算阈值并进行二值化
ret, thresh_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

# ret变量现在包含由Otsu's 方法计算出的最优阈值
# thresh_img是应用了这个阈值后的二值化图像

# 显示原始图像和二值化后的图像
cv2.imshow('Original Image', gray_img)
cv2.imshow('Thresholded Image', thresh_img)

# 等待按键并关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,ret 变量将包含由Otsu's 方法计算出的最优阈值,而 thresh_img 是应用了这个阈值后的二值化图像。这种方法在处理光照不均或具有不同对比度的图像时特别有用,因为它可以自动适应图像内容来确定最佳阈值。

cv2.adaptiveThreshold

cv2.adaptiveThreshold 是 OpenCV 中的一个图像处理函数,用于对灰度图像进行自适应阈值处理。与全局阈值处理不同,自适应阈值处理根据图像的局部区域来确定阈值,因此可以有效地处理光照不均匀的图像1。

以下是 cv2.adaptiveThreshold 的详细用法和参数说明:

函数原型

python 复制代码
cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

参数说明

  • src:输入图像,应为灰度图像。
  • maxValue:当像素值超过(或小于,取决于阈值类型)计算出的阈值时,所赋予的值。通常设置为 255,表示白色。
  • adaptiveMethod:自适应方法,决定如何计算阈值。常用的有 cv2.ADAPTIVE_THRESH_MEAN_C(邻域内像素的平均值)和 cv2.ADAPTIVE_THRESH_GAUSSIAN_C(邻域内像素的高斯加权和)。
  • thresholdType:阈值类型,决定如何应用阈值。常用的有 cv2.THRESH_BINARY(二值化)和 cv2.THRESH_BINARY_INV(反二值化)。
  • blockSize:计算阈值时要考虑的邻域大小(像素数量)。这个值必须是奇数。
  • C:从计算出的阈值中减去的常数。

使用示例

python 复制代码
import cv2

# 读取图像并转换为灰度图像
gray_img = cv2.imread('path_to_your_image.jpg', cv2.IMREAD_GRAYSCALE)

# 使用自适应阈值处理
thresh_img = cv2.adaptiveThreshold(gray_img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)

# 显示原始图像和处理后的图像
cv2.imshow('Original Image', gray_img)
cv2.imshow('Adaptive Threshold Image', thresh_img)

# 等待按键并关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个示例中,blockSize 设置为 11(一个奇数),C 设置为 2。你可以根据图像的特点调整这些参数以获得最佳效果。

相关推荐
区块链小八歌10 分钟前
从电商收入到链上资产:Liquid Royalty在 Berachain 重塑 RWA 想象力
大数据·人工智能·区块链
沃达德软件16 分钟前
大数据反诈平台功能解析
大数据·人工智能
OAoffice21 分钟前
智能学习培训考试平台如何驱动未来组织:重塑人才发展格局
人工智能·学习·企业智能学习考试平台·学练考一体化平台
岁月宁静25 分钟前
LangChain + LangGraph 实战:构建生产级多模态 WorkflowAgent 的完整指南
人工智能·python·agent
Java中文社群31 分钟前
重磅!N8N新版2.0发布!不再支持MySQL?
人工智能
梯度下降不了班1 小时前
【mmodel/xDit】Cross-Attention 深度解析:文生图/文生视频的核心桥梁
人工智能·深度学习·ai作画·stable diffusion·音视频·transformer
大模型服务器厂商1 小时前
人形机器人的技术概况与算力支撑背景
大数据·人工智能
老蒋新思维1 小时前
创客匠人洞察:AI 时代 IP 变现的认知重构,从流量焦虑到价值深耕的破局之道
网络·人工智能·tcp/ip·重构·知识付费·创始人ip·创客匠人
商汤万象开发者1 小时前
UniParse:让多模态模型真正“读懂”文档的解析引擎
人工智能·多模态模型·ai应用·文档解析·版面分析·内容提取
第二只羽毛1 小时前
主题爬虫采集主题新闻信息
大数据·爬虫·python·网络爬虫