首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

OpenCV中的图像阈值化操作详解(代码实现)

  • 24-03-18 00:44
  • 4153
  • 12288
blog.csdn.net

目录

引言

什么是图像阈值化?

cv2.threshold函数概述

python代码实现图像阈值化

完整代码展示


引言

图像处理是计算机视觉和图像分析的一个重要领域,其中阈值化是一项常用的图像处理技术之一。在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.读取图像 

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('image.jpg', 0) # 以灰度模式读取图像

2.使用 cv2.threshold()进行阈值化处理

  1. # 阈值化操作
  2. thresh, thresholded = cv2.threshold(image, 220, 255, cv2.THRESH_BINARY)

3.显示原始图像和阈值化后的图像 

  1. # 显示原始图像和阈值化后的图像
  2. cv2.imshow('Original Image', image)
  3. cv2.imshow('Thresholded Image', thresholded)
  4. cv2.waitKey(0)
  5. cv2.destroyAllWindows()

4.运行结果展示:

 

完整代码展示

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('lufei.jpg', cv2.IMREAD_GRAYSCALE) # 以灰度模式读取图像
  4. # 阈值化操作
  5. thresh, thresholded = cv2.threshold(image, 200, 255, cv2.THRESH_BINARY)
  6. # 显示原始图像和阈值化后的图像
  7. cv2.imshow('Original Image', image)
  8. cv2.imshow('Thresholded Image', thresholded)
  9. cv2.waitKey(0)
  10. cv2.destroyAllWindows()

目录

引言

什么是图像阈值化?

cv2.threshold函数概述

python代码实现图像阈值化

完整代码展示


引言

图像处理是计算机视觉和图像分析的一个重要领域,其中阈值化是一项常用的图像处理技术之一。在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.读取图像 

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('image.jpg', 0) # 以灰度模式读取图像

2.使用 cv2.threshold()进行阈值化处理

  1. # 阈值化操作
  2. thresh, thresholded = cv2.threshold(image, 220, 255, cv2.THRESH_BINARY)

3.显示原始图像和阈值化后的图像 

  1. # 显示原始图像和阈值化后的图像
  2. cv2.imshow('Original Image', image)
  3. cv2.imshow('Thresholded Image', thresholded)
  4. cv2.waitKey(0)
  5. cv2.destroyAllWindows()

4.运行结果展示:

 

完整代码展示

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('lufei.jpg', cv2.IMREAD_GRAYSCALE) # 以灰度模式读取图像
  4. # 阈值化操作
  5. thresh, thresholded = cv2.threshold(image, 200, 255, cv2.THRESH_BINARY)
  6. # 显示原始图像和阈值化后的图像
  7. cv2.imshow('Original Image', image)
  8. cv2.imshow('Thresholded Image', thresholded)
  9. cv2.waitKey(0)
  10. cv2.destroyAllWindows()

注:本文转载自blog.csdn.net的AI_dataloads的文章"https://blog.csdn.net/AI_dataloads/article/details/133868299"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top