HSV色彩空间表和cv2.inRange()的用法

结合cv2.inRange()可以清晰看到某个颜色区域影象位于影象的什么地方。
用法cv2.inRange(img,low,high),函式会将位于两个区域间的值置为255,位于区间外的值置为0。
比如想要看到红色的区域处于影象中的什么位置,红色的区域是[0,43,46],[10,255,255]

hsv = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV)
lower_red = np.array([0,43,46])
upper_red = np.array(10, 255, 255])
mask = cv2.inRange(hsv, lower_red, upper_red)
cv2.imshow('hsv',mask)

效果:

用到主要函数:

函数一:

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

函数二:

cv2.inRange(hsv, lower_red, upper_red)

本次目标是将一副图像从rgb颜色空间转换到hsv颜色空间,颜色去除白色背景部分

具体就调用了cv2的两个函数,一个是rgb转hsv的函数

具体用法

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 channelmask = 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] )

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

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

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

对于双通道输入:

同样应用于四通道

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

各参数详细含义:

src 输入的数组

lowerb 下边界数组或标量.

upperb 上边界数组或标量.

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

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

import matplotlib.pyplot as plt
import numpy as np
import 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()

最终结果为一个红色、一个黑色的、一个白色的小点。

HSV色彩空间表和cv2.inRange()的用法相关推荐

  1. Opencv inRang() 和HSV色彩空间表

    文章目录 1. 常规使用 2. HSV颜色解释和求值 3. 将某一个RGB颜色转为对应的HSV表示 参考Opencv文档,点击 这里 1. 常规使用 想通过cv2.inRange()筛选颜色区域,一般 ...

  2. python中opencv中inrange用法_python-opencv中的cv2.inRange函数

    本次目标是将一副图像从rgb颜色空间转换到hsv颜色空间,颜色去除白色背景部分 具体就调用了cv2的两个函数,一个是rgb转hsv的函数 具体用法 hsv = cv2.cvtColor(rgb_ima ...

  3. OpenCV学习笔记——HSV颜色空间超极详解inRange函数用法及实战

    目录 一.HSV颜色系统简介 二.HSV值对颜色的影响 三.HSV和RGB的互相转化 四.OpenCV中的HSV颜色体系 五.OpenCV实战--两种方法使用OpenCV进行颜色分割 六.inRang ...

  4. RGB到HSV色彩空间转换表

    RGB到HSV色彩空间转换表

  5. RGB色彩空间和HSV色彩空间的理解

    RGB色彩空间和HSV色彩空间的理解 本文的结构如下: 1.RGB色彩空间 2.HSV色彩空间(附HSV颜色分量范围表) 3.RGB到HSV的转换的Demo   使用OpenCV实现RGB转HSV,并 ...

  6. python-opencv中的cv2.inRange函数

    opencv  api https://docs.opencv.org/master/ python-opencv中的cv2.inRange函数 原创hjxu2016 最后发布于2017-09-04 ...

  7. Python OpenCv 车牌检测识别(边缘检测、HSV色彩空间判断)

    Python OpenCv 车牌检测识别 背景 车牌识别在交通.停车等方面有着广泛应用,在网上也有很多种基于OpenCV方案进行识别,本文是综合了两种比较流行的方案,首先是提取出疑似车牌区域的轮廓,然 ...

  8. [Python图像处理] 使用 HSV 色彩空间检测病毒对象

    使用 HSV 色彩空间检测病毒对象 前言 检测病毒对象 相关链接 前言 在本节中,我们将学习如何使用 OpenCV 在 HSV 色彩空间中使用特定颜色检测感兴趣对象.我们需要通过指定颜色值范围识别和提 ...

  9. HSV色彩空间筛选 2021-10-06

    运行效果:(筛选蓝色) 白色为符合颜色空间的区域 运行代码: # -*- coding: utf-8 -*-import cv2 import numpy as npcamera = cv2.Vide ...

最新文章

  1. 聊聊dubbo的Filter
  2. 设计模式之抽象工厂模式学习笔记
  3. memcached failed to listen问题解决以及 结束daemon的方法
  4. oracle cols user_tab_columns,user_tab_cols和user_tab_columns的区别
  5. c#操作excel后关闭excel.exe的方法
  6. 数据库工作笔记016---Redis、Memcache和MongoDB的区别
  7. anspython_python堆(heapq)的实现
  8. 2.抽象工厂(Abstract Factory)
  9. 01、STM8 单片机芯片介绍
  10. html自动获取图片,html img动态读取图片
  11. CSS4day(圆角边框,阴影,浮动详解及其示例)
  12. 吉林大学单片机实验课实验五——重量测量
  13. C#winform连接数据库实现登陆注册(数据库的安装与配置)
  14. ae无法连接ame_怎么我的AE无法连接media encoder?如何解决AE链接不了media encoder的问题?求教谢谢...
  15. 联想小新一键恢复小孔_联想小新笔记本如何一键恢复出厂设置_联想小新air恢复出厂设置教程...
  16. 人工智能、物联网时代,嵌入式思维的应用
  17. 注册淘宝安装工要求 淘宝安装工怎么接活
  18. 基于springboot万花筒系统 毕业设计-附源码345600
  19. NeurIPS/ICLR/ICML AI三大会国内高校和企业近年中稿量完整统计
  20. Linux qt shell脚本,QT执行shell脚本或者执行linux指令

热门文章

  1. 成功解决 fatal: unable to access ‘https://github.com/...‘: Encountered end of file
  2. kafka java代码横杠_Apache Beam Kafkaio获取java.lang.illegalargumentException:无法序列化KafkaunBoundedSource...
  3. 解决华为系列手机真机调试Logcat不显示问题
  4. 排序算法分析:冒泡排序、选择排序、插入排序、希尔排序、快速排序
  5. 区块链将改变美国乃至世界商业地产的面貌
  6. TensorRT量化第三课:动态范围的常用计算方法
  7. 在计算机主机与外部输入输出设备间,输入输出系统
  8. saiku java_Saiku的下载与安装(一)
  9. 数据结构习题:找出临界点之间的最小和最大距离
  10. 5月14日 python学习总结 视图、触发器、事务、存储过程、函数、流程控制、索引...