我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python OpenCV阈值处理的示例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python OpenCV阈值处理的示例分析

小编给大家分享一下Python OpenCV阈值处理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

前言

图像分割是许多计算机视觉应用中的关键处理步骤,通常用于将图像划分为不同的区域,这些区域常常对应于真实世界的对象。因此,图像分割是图像识别和内容分析的重要步骤。图像阈值是一种简单、有效的图像分割方法,其中像素根据其强度值进行分区。在本文中,将介绍 OpenCV 所提供的主要阈值技术,可以将这些技术用作计算机视觉应用程序中图像分割的关键部分。

阈值技术简介

阈值处理是一种简单、有效的将图像划分为前景和背景的方法。图像分割通常用于根据对象的某些属性(例如,颜色、边缘或直方图)从背景中提取对象。最简单的阈值方法会利用预定义常数(阈值),如果像素强度小于阈值,则用黑色像素替换,如果像素强度大于阈值,则用白色像素替换。OpenCV 提供了 cv2.threshold() 函数来对图像进行阈值处理。

为了测试 cv2.threshold() 函数,首次创建测试图像,其包含一些填充了不同的灰色调的大小相同的区域,利用 build_sample_image() 函数构建此测试图像:

def build_sample_image():    """创建填充了不同的灰色调的大小相同的区域,作为测试图像"""    # 定义不同区域    tones = np.arange(start=50, stop=300, step=50)    # 初始化    result = np.zeros((50, 50, 3), dtype="uint8")    for tone in tones:        img = np.ones((50, 50, 3), dtype="uint8") * tone        # 沿轴连接数组        result = np.concatenate((result, img), axis=1)    return result

接下来将使用不同的预定义阈值: 0 、 50 、 100 、 150 、 200 和 250 调用 cv2.threshold() 函数,以查看不同预定义阈值对阈值图像影响。例如,使用阈值 thresh = 50 对图像进行阈值处理:

ret1, thresh2 = cv2.threshold(gray_image, 50, 255, cv2.THRESH_BINARY)

其中,thresh2 是仅包含黑白色的阈值图像。源图像 gray_image 中灰色强度小于 50 的像素为黑色,强度大于 50 的像素为白色。

使用多个不同阈值对图像进行阈值处理:

# 可视化函数def show_img_with_matplotlib(color_img, title, pos):    img_RGB = color_img[:, :, ::-1]    ax = plt.subplot(7, 1, pos)    plt.imshow(img_RGB)    plt.title(title, fontsize=8)    plt.axis('off')# 使用 build_sample_image() 函数构建测试图像image = build_sample_image()gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)for i in range(6):    # 使用多个不同阈值对图像进行阈值处理    ret, thresh = cv2.threshold(gray_image, 50 * i, 255, cv2.THRESH_BINARY)    # 可视化    show_img_with_matplotlib(cv2.cvtColor(thresh, cv2.COLOR_GRAY2BGR), "threshold = {}".format(i * 50), i + 2)# 可视化测试图像show_img_with_matplotlib(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR), "img with tones of gray - left to right: (0,50,100,150,200,250)", 1)# 图像进行阈值处理后,常见的输出是黑白图像# 因此,为了更好的可视化效果,修改背景颜色fig.patch.set_facecolor('silver')plt.show()

Python OpenCV阈值处理的示例分析

从上图可以看出,根据阈值和样本图像灰度值的不同,阈值处理后生成的黑白图像的变化情况。

简单的阈值技术

上一节中,我们已经简单介绍过了 OpenCV 中提供的简单阈值处理函数——cv2.threshold(),该函数用法如下:

cv2.threshold(class="lazy" data-src, thresh, maxval, type, dst=None) -> retval, dst

cv2.threshold() 函数对 class="lazy" data-src 输入数组(可以为单通道或多通道图像)应用预定义常数 thresh 设置的阈值;type 参数用于设置阈值类型,阈值类型的可选值如下:cv2.THRESH_BINARYcv2.THRESH_BINARY_INVcv2.THRESH_TRUNCcv2.THRESH_TOZEROcv2.THRESH_TOZERO_INVcv2.THRESH_OTSUcv2.THRESH_TRIANGLE

maxval 参数用于设置最大值,其仅在阈值类型为 cv2.THRESH_BINARYcv2.THRESH_BINARY_INV 时有效;需要注意的是,在阈值类型为 cv2.THRESH_OTSUcv2.THRESH_TRIANGLE 时,输入图像 class="lazy" data-src 应为为单通道。

阈值类型

为了更好的了解阈值操作的不同类型,接下来给出每种阈值类型的具体公式。符号说明:class="lazy" data-src 是源(原始)图像,dst 对应于阈值化后的目标(结果)图像,因此,class="lazy" data-src(x, y) 对应于源图像像素 (x, y) 处的强度,而 dst(x, y) 对应于目标图像像素 (x, y) 处的强度。

阈值类型 cv2.THRESH_BINARY 公式如下:

Python OpenCV阈值处理的示例分析

其表示,如果像素 class="lazy" data-src(x, y) 的强度高于 thresh,则目标图像像素强度 dst(x,y) 将被设为 maxval;否则,设为 0

阈值类型 cv2.THRESH_BINARY_INV 公式如下:

Python OpenCV阈值处理的示例分析

其表示,如果像素 class="lazy" data-src(x, y) 的强度高于 thresh,则目标图像像素强度 dst(x,y) 将被设为 0;否则,设为 maxval

阈值类型 cv2.THRESH_TRUNC 公式如下:

Python OpenCV阈值处理的示例分析

其表示,如果像素 class="lazy" data-src(x, y) 的强度高于 thresh,则目标图像像素强度设置为 threshold;否则,设为 class="lazy" data-src(x, y)

阈值类型 cv2.THRESH_TOZERO 公式如下:

Python OpenCV阈值处理的示例分析

其表示,如果像素 class="lazy" data-src(x, y) 的强度高于 thresh,则目标图像像素值将设置为 class="lazy" data-src(x, y);否则,设置为 0

阈值类型 cv2.THRESH_TOZERO_INV 公式如下:

Python OpenCV阈值处理的示例分析

其表示,如果像素 class="lazy" data-src(x, y) 的强度大于 thresh,则目标图像像素值将设置为 0;否则,设置为 class="lazy" data-src(x, y)

cv2.THRESH_OTSUcv2.THRESH_TRIANGLE 属于特殊的阈值类型,它们可以与上述阈值类型( cv2.THRESH_BINARYcv2.THRESH_BINARY_INVcv2.THRESH_TRUNCcv2.THRESH_TOZEROcv2.THRESH_TOZERO_INV)进行组合。组合后,阈值处理函数 cv2.threshold() 将只能处理单通道图像,且计算并返回最佳阈值,而非指定阈值。

接下来使用不同阈值类型对同样的测试图像进行阈值处理,观察不同阈值处理效果:

ret1, thresh2 = cv2.threshold(gray_image, 100, 255, cv2.THRESH_BINARY)ret2, thresh3 = cv2.threshold(gray_image, 100, 220, cv2.THRESH_BINARY)ret3, thresh4 = cv2.threshold(gray_image, 100, 255, cv2.THRESH_BINARY_INV)ret4, thresh5 = cv2.threshold(gray_image, 100, 220, cv2.THRESH_BINARY_INV)ret5, thresh6 = cv2.threshold(gray_image, 100, 255, cv2.THRESH_TRUNC)ret6, thresh7 = cv2.threshold(gray_image, 100, 255, cv2.THRESH_TOZERO)ret7, thresh7 = cv2.threshold(gray_image,100,255, cv2.THRESH_TOZERO_INV)# 可视化show_img_with_matplotlib(cv2.cvtColor(thresh2, cv2.COLOR_GRAY2BGR), "THRESH_BINARY - thresh = 100 & maxValue = 255", 2)show_img_with_matplotlib(cv2.cvtColor(thresh3, cv2.COLOR_GRAY2BGR), "THRESH_BINARY - thresh = 100 & maxValue = 220", 3)show_img_with_matplotlib(cv2.cvtColor(thresh4, cv2.COLOR_GRAY2BGR), "THRESH_BINARY_INV - thresh = 100", 4)# 其他图像可视化方法类似,不再赘述# ...

Python OpenCV阈值处理的示例分析

如上图所示,maxval 参数仅在使用 cv2.THRESH_BINARYcv2.THRESH_BINARY_INV 阈值类型时有效,上例中将 cv2.THRESH_BINARYcv2.THRESH_BINARY_INV 类型的 maxval 值设置为 255220,以便查看阈值图像在这两种情况下的变化情况。

简单阈值技术的实际应用

了解 cv2.threshold() 不同参数的工作原理后,我们将 cv2.threshold() 应用于真实图像,并使用不同的阈值:

# 加载图像image = cv2.imread('example.png')gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 绘制灰度图像show_img_with_matplotlib(cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR), "img", 1)# 使用不同的阈值调用 cv2.threshold() 并进行可视化for i in range(8):    ret, thresh = cv2.threshold(gray_image, 130 + i * 10, 255, cv2.THRESH_BINARY)    show_img_with_matplotlib(cv2.cvtColor(thresh, cv2.COLOR_GRAY2BGR), "threshold = {}".format(130 + i * 10), i + 2)

Python OpenCV阈值处理的示例分析

看完了这篇文章,相信你对“Python OpenCV阈值处理的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python OpenCV阈值处理的示例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python OpenCV阈值处理的示例分析

小编给大家分享一下Python OpenCV阈值处理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言图像分割是许多计算机视觉应用中的关键处理步骤,通常用于将图像划分为不同的区域,这些区域常常对应于真实世界的对象
2023-06-29

Python中opencv医学处理的示例分析

这篇文章给大家分享的是有关Python中opencv医学处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能
2023-06-15

python opencv图像处理基本操作的示例分析

本篇文章给大家分享的是有关python opencv图像处理基本操作的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。①读取图像②显示图像该函数中,name是显示窗口的名
2023-06-25

Python+OpenCV图像处理之直方图统计的示例分析

这篇文章主要为大家展示了“Python+OpenCV图像处理之直方图统计的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python+OpenCV图像处理之直方图统计的示例分析”这篇文章
2023-06-22

Python中opencv操作的示例分析

这篇文章主要介绍Python中opencv操作的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!直接读取图片def display_img(file="p.jpeg"): img = cv.imread(fi
2023-06-14

Python OpenCV图像识别的示例分析

小编给大家分享一下Python OpenCV图像识别的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、人脸识别主要有以下两种实现方法:1、哈尔(Haar)级联法:专门解决人脸识别而推出的传统算法;实现步骤:创建H
2023-06-29

Python数据异常值检测和处理的示例分析

这篇文章主要介绍Python数据异常值检测和处理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 什么是异常值?在机器学习中,异常检测和处理是一个比较小的分支,或者说,是机器学习的一个副产物,因为在一般的预
2023-06-29

Python-OpenCV深度学习的示例分析

这篇文章将为大家详细讲解有关Python-OpenCV深度学习的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 计算机视觉中的深度学习简介深度学习推动了计算机视觉领域的深刻变革,我们首先解释深
2023-06-22

Python默认值的示例分析

这篇文章给大家分享的是有关Python默认值的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、使用注意使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参。这让Python依然能够
2023-06-15

Shell中处理方法返回值的示例分析

这篇文章主要介绍了Shell中处理方法返回值的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。测试程序我们一般通过$?来获取上一个语句的输出。看一下下面得测试语句:新建
2023-06-09

Python OpenCV形态学运算示例分析

今天小编给大家分享一下Python OpenCV形态学运算示例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 腐蚀
2023-06-29

Python异常处理机制的示例分析

这篇文章将为大家详细讲解有关Python异常处理机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是异常?def num(a, b): a = int(a) b = int(b)
2023-06-22

python异常时语句处理的示例分析

这篇文章给大家分享的是有关python异常时语句处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌
2023-06-14

Python中图像量化处理的示例分析

小编给大家分享一下Python中图像量化处理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.图像量化处理原理量化(Quantization)旨在将图像
2023-06-29

Python中图片采样处理的示例分析

这篇文章给大家分享的是有关Python中图片采样处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.图像采样处理原理图像采样(Image Sampling)处理是将一幅连续图像在空间上分割成M&tim
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录