文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么在python中使用cv2.inRange函数

2023-06-14 19:52

关注

本篇文章给大家分享的是有关怎么在python中使用cv2.inRange函数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Python主要用来做什么

Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游戏开发;6、桌面应用开发。

具体用法

hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV)

然后利用cv2.inRange函数设阈值,去除背景部分

mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,

函数很简单,参数有三个

第一个参数:hsv指的是原图

第二个参数:lower_red指的是图像中低于这个lower_red的值,图像值变为0

第三个参数:upper_red指的是图像中高于这个upper_red的值,图像值变为0

而在lower_red~upper_red之间的值变成255

lower_red = np.array([20, 20, 20])upper_red = np.array([200, 200, 200])mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0,lower~upper==>255

就是将低于lower_red和高于upper_red的部分分别变成0,lower_red~upper_red之间的值变成255

具体用法如下

 hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV) lower_red = np.array([20, 20, 20]) upper_red = np.array([200, 200, 200]) # mask -> 1 channel mask = cv2.inRange(hsv, lower_red, upper_red) #lower20===>0,upper200==>0

补充:色彩阀值化处理——openCV-python中inRange()等相关函数实测

色彩阀值化

在图像处理的过程中,使用各种形态学操作或者滤波的方式来突显我们关注的元素,同时降低噪声并减少干扰我们提取关键元素的影响项。除了这些方法外,我们可以在原图中先依据颜色的特征,提取出更为关键的像素。就像车道检测时,一般车道只有两种颜色:黄色和白色。所以我们可以在 RGB 色彩空间(Color Space) 对这两种颜色进行过滤从而提取出车道线的像素。

色彩空间:使用一组值(通常使用三个、四个值或者颜色成分)表示颜色方法的抽象数学模型。有利用原色相混的比例表示的色彩空间,如 RGB (Red, Green, Blue) 颜色空间; 也有利用不同的概念表示的色彩空间,如 HSV (色相 hue, 饱和度 saturation, 明度 value) 以及 HSL (色相 hue,饱和度 saturation,亮度 lightness/luminance) 。

在OpenCV中,RGB三通道的图像的读取 cv2.imread() 的结果是以 BGR 顺序排列的,而在使用matplotlib的 plt.imread() 时, 读取的通道排列顺序则为 RGB 。因此此处应当注意区别。

openCV中cv2.inRange()函数是实现该功能的关键,我们先看看官网对该函数的定义:

dst = cv.inRange( src, lowerb, upperb[, dst] )

检测数组元素是否位于其他两个元素之间。

该函数检测范围方式如下:

对于单通道输入的每个元素:

怎么在python中使用cv2.inRange函数

对于双通道输入:

怎么在python中使用cv2.inRange函数

同样应用于四通道

也就是说,如果src (I)在指定的1D, 2D, 3D,…框内则dst(I)为255,否则为0。当下边界和/或上边界参数为标量时,应省略上述公式中在上、下边界处的索引(I)。

各参数详细含义:

src 输入的数组

lowerb 下边界数组或标量.

upperb 上边界数组或标量.

dst 与src和CV_8U类型大小相同的输出数组。

接下来将结合简单的例子通过python更好地理解这个函数:

import matplotlib.pyplot as pltimport numpy as npimport cv2# 对图片进行读取img_cv2 = cv2.imread('D:\\test\\CVtest.jpg')print(img_cv2)

为了方便理解,我用画板工具画了一个5×5像素点的红色图片。上述代码运行结果为:

[[[ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]] [[ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]] [[ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]] [[ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]] [[ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]  [ 36  27 237]]]

读者可以自行测试一下,B=36,G=27,R=237为红色。

# 创建RGB色彩空间color_Low1 = np.array([30,27,237])color_Low2 = np.array([39,27,237])color_High = np.array([40,27,237])# 对图片进行阀值化处理img_dst1 = cv2.inRange(img_cv2,color_Low1,color_High)img_dst2 = cv2.inRange(img_cv2,color_Low2,color_High)#对结果进行打印print(img_dst1,'\n', img_dst2)# 运行结果分别为[[255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255] [255 255 255 255 255]] [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]

可以看出,当图片中的像素点落在色彩空间时,输出结果全是255,当像素点不落在色彩空间是,输出结果全是0。对最终结果进行显示:

#对图像进行展示cv2.imshow("origin_img",img_cv2)cv2.imshow("dst_img1",img_dst1)cv2.imshow("dst_img2",img_dst2)cv2.waitKey(0)cv2.destroyAllWindows()

以上就是怎么在python中使用cv2.inRange函数,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯