cv2.inrange函数的详解

一、cv2.inrange概述

cv2.inrange是OpenCV(Python版)的函数库中常用的一个函数,该函数可以帮助开发者实现指定范围内的颜色选择,也就是在图像处理中对指定区域的像素进行筛选。这个函数能快速的对图像的颜色、亮度等进行筛选输出符合要求的像素值集合,而且比较易于使用,常用于图像的前处理工作中,如目标颜色检测等,对于图像的关键颜色分离,该函数也是非常有用的。

二、cv2.inrange函数的调用方法

调用cv2.inrange函数时,我们需要注意几个重要的参数,我们来看看下面的代码:

import cv2
import numpy as np

image = cv2.imread('test.jpg')
lower = np.array([0, 0, 0]) # 下界
upper = np.array([255, 255, 255]) # 上界
mask = cv2.inRange(image, lower, upper) # 通过对比原图和上下界值,返回一个二值化的掩码图像
output = cv2.bitwise_and(image, image, mask=mask) # 通过 mask 将指定区域像素变成黑色
cv2.imshow('Output', output)

cv2.waitKey(0)

以上代码需要更改 lower 和 upper 参数值分别代表颜色的下限和上限,经过处理后的图像区域颜色会在这个范围内,而变成白色,不在范围内的颜色区域会变成黑色。

三、cv2.inrange的两个返回变量

在上例中,cv2.inRange函数返回了两个变量, mask 表示一个二值化的掩模图像, output表示经过 mask 处理后的新图像。

mask的作用是,通过对比原图和上下界值,返回一个二值化的掩码图像,该图像的黑白分界线就是上下界设定的阈值,这个阈值包括两种状态,满足(黑色)和不满足(白色)。当然,这个匹配的条件是由我们自己设定的,所以不同的条件下得到的图像也是有所不同的。

output函数是在原始图片基础上组合mask因素之后得到的新图像。在这个新图像中,只有指定范围内的颜色部分才能保留下来,不在指定范围内的部分则被变成黑色。output函数的一项重要作用主要用于遮挡,当我们只需要用到某个图上的特定部分时,可以使用output函数将不需要的部分遮挡住(即变成黑色),从而分离出需要的部分,用于之后的处理。

四、cv2.inrange函数的应用实例

下面我们可以通过一些实例来更好地理解cv2.inrange函数的具体应用:

1、颜色区间选取

假设我们有一张图片,图片中有蓝色的球和绿色的球。我们想要取出只有蓝球,将绿球去掉,可以通过以下代码实现:

import cv2
import numpy as np

# 读取图片
image = cv2.imread('test1.jpg')

# 将图像从BGR空间转换成HSV空间
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

# 设定蓝色的阈值
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])

# 设定绿色的阈值
# 在 HSV 中,绿色的范围是 60-120
lower_green = np.array([40, 50, 50])
upper_green = np.array([70, 255, 255])

# 设定蓝色和绿色的掩码
blue_mask = cv2.inRange(hsv, lower_blue, upper_blue)
green_mask = cv2.inRange(hsv, lower_green, upper_green)

# 对图像进行掩模和反掩模计算
res_blue = cv2.bitwise_and(image, image, mask=blue_mask)
res_green = cv2.bitwise_and(image, image, mask=green_mask)
res_or = cv2.bitwise_or(res_blue, res_green)

cv2.imshow('blue', res_blue)
cv2.imshow('green', res_green)
cv2.imshow('or', res_or)
cv2.waitKey(0)

当我们对这张图像和以上代码进行处理时,绿色的部分会被过滤掉,而蓝色的部分则保留下来。

2、图片二值化

我们可以使用cv2.inrange函数将原图像转换成二值图像,利用一些其它的方式能更好地处理图像的亮度和颜色等信息,当然二值化也是一种通用的图像处理方法。

import cv2
import numpy as np

image = cv2.imread('test2.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 设定图片阈值
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)

# 使用cv2.inRange转换成颜色阈值
lower = np.array([0])
upper = np.array([50])
mask = cv2.inRange(thresh, lower, upper)

# 应用mask
res = cv2.bitwise_and(image, image, mask=mask)

cv2.imshow('gray', gray)
cv2.imshow('thresh', thresh)
cv2.imshow('mask', mask)
cv2.imshow('res', res)
cv2.waitKey(0)

在这个例子中,我们将原图片转化为灰度图并进行二值化。通过cv2.inRange函数,我们将特定的部分分割出来,然后处理。

五、总结

通过以上的分析,我们可以看到cv2.inrange函数在图像处理过程中的重要性。通过对上下界的设定,我们可以应用cv2.inrange函数快速准确地选择需要的区域,这对于初学者和有经验的开发者来说都是可以实现的。出于对图像处理技术的研究,本次讲解了cv2.inrange函数,相信读者在实践中也可以举一反三,应用到自己的项目中。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/242974.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:53
下一篇 2024-12-12 12:53

相关推荐

  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python中capitalize函数的使用

    在Python的字符串操作中,capitalize函数常常被用到,这个函数可以使字符串中的第一个单词首字母大写,其余字母小写。在本文中,我们将从以下几个方面对capitalize函…

    编程 2025-04-29
  • Python中set函数的作用

    Python中set函数是一个有用的数据类型,可以被用于许多编程场景中。在这篇文章中,我们将学习Python中set函数的多个方面,从而深入了解这个函数在Python中的用途。 一…

    编程 2025-04-29
  • 三角函数用英语怎么说

    三角函数,即三角比函数,是指在一个锐角三角形中某一角的对边、邻边之比。在数学中,三角函数包括正弦、余弦、正切等,它们在数学、物理、工程和计算机等领域都得到了广泛的应用。 一、正弦函…

    编程 2025-04-29
  • 单片机打印函数

    单片机打印是指通过串口或并口将一些数据打印到终端设备上。在单片机应用中,打印非常重要。正确的打印数据可以让我们知道单片机运行的状态,方便我们进行调试;错误的打印数据可以帮助我们快速…

    编程 2025-04-29
  • Python3定义函数参数类型

    Python是一门动态类型语言,不需要在定义变量时显示的指定变量类型,但是Python3中提供了函数参数类型的声明功能,在函数定义时明确定义参数类型。在函数的形参后面加上冒号(:)…

    编程 2025-04-29
  • Python定义函数判断奇偶数

    本文将从多个方面详细阐述Python定义函数判断奇偶数的方法,并提供完整的代码示例。 一、初步了解Python函数 在介绍Python如何定义函数判断奇偶数之前,我们先来了解一下P…

    编程 2025-04-29
  • Python实现计算阶乘的函数

    本文将介绍如何使用Python定义函数fact(n),计算n的阶乘。 一、什么是阶乘 阶乘指从1乘到指定数之间所有整数的乘积。如:5! = 5 * 4 * 3 * 2 * 1 = …

    编程 2025-04-29
  • 分段函数Python

    本文将从以下几个方面详细阐述Python中的分段函数,包括函数基本定义、调用示例、图像绘制、函数优化和应用实例。 一、函数基本定义 分段函数又称为条件函数,指一条直线段或曲线段,由…

    编程 2025-04-29
  • Python函数名称相同参数不同:多态

    Python是一门面向对象的编程语言,它强烈支持多态性 一、什么是多态多态是面向对象三大特性中的一种,它指的是:相同的函数名称可以有不同的实现方式。也就是说,不同的对象调用同名方法…

    编程 2025-04-29

发表回复

登录后才能评论