HSV颜色空间更容易表示一个特定颜色,通过opencv读取的图片为BGR颜色空间,我们利用cv2.cvtColor()可以轻松实现颜色空间的转变。

在函数之前,我们先大致了解一下HSV基本颜色分量范围(通过实验得到的模糊范围,实际操作中我们可以据此做出适当调整)。

图片来自:https://blog.csdn.net/taily_duan/article/details/51506776

函数学习

1. cv2.inRange(src, lowerb, upperb)

作用:

官方解释就是检查数组元素是否位于另外两个数组的元素之间,简言之就是找出指定范围内的颜色,并返回一个二值图像,指定范围内的图像显示为白色,相反为黑色。(注:cv2.inRange()函数对应的颜色空间为HSV)

参数:

  • src:输入图像
  • lowerb:颜色范围下边界(lower boundary)
  • upperb:颜色范围上边界(upper boundary)

e.g.

import cv2
import numpy as np
#载入原图
img_original=cv2.imread('E:\ShannonT\\notebook workspace\\images\\qicai.png')
#转变为HSV颜色空间
img_hsv=cv2.cvtColor(img_original,cv2.COLOR_BGR2HSV)
#返回黄色区域的二值图像
img_yellow=cv2.inRange(img_original,(27,160,215),(83,255,255))
cv2.imshow('img_original',img_original)
cv2.imshow('img_target',img_target)
cv2.waitKey()
cv2.destroyAllWindows() 

程序输出如下:

2. cv2.bitwise_and(src1,src2[,mask])

作用:

将图像1和图像2进行按位与操作(bitwise:按位)

参数:

  • src1:输入图像1
  • src2:输入图像2
  • mask:可选参数,掩模(可以理解为一个窗口,作用为实现指定区域内的图像操作)

e.g.

import cv2
import numpy as np
#载入原图
img_original=cv2.imread('E:\ShannonT\\notebook workspace\\images\\qicai.png')
#转变为HSV颜色空间
img_hsv=cv2.cvtColor(img_original,cv2.COLOR_BGR2HSV)
#返回黄色区域的二值图像
img_yellow=cv2.inRange(img_original,(27,160,215),(83,255,255))
##输入图像与输入图像在掩模条件下按位与,得到掩模范围内的原图像
img_specifiedColor=cv2.bitwise_and(img_original,img_original,mask=img_yellow)
cv2.imshow('img_yellow',img_specifiedColor)
cv2.waitKey()
cv2.destroyAllWindows()

程序输出如下:

下面通过一个具体的案例实现图像内黄色信息的识别,并加入滑动条的功能,可以让用户更直观地体验HSV颜色空间。

import cv2
import numpy as np
#定义窗口名称
winName='Colors of the rainbow'
#定义滑动条回调函数,此处pass用作占位语句保持程序结构的完整性
def nothing(x):pass
img_original=cv2.imread('E:\ShannonT\\notebook workspace\\images\\qicai.png')
#颜色空间的转换
img_hsv=cv2.cvtColor(img_original,cv2.COLOR_BGR2HSV)
#新建窗口
cv2.namedWindow(winName)
#新建6个滑动条,表示颜色范围的上下边界,这里滑动条的初始化位置即为黄色的颜色范围
cv2.createTrackbar('LowerbH',winName,27,255,nothing)
cv2.createTrackbar('LowerbS',winName,160,255,nothing)
cv2.createTrackbar('LowerbV',winName,215,255,nothing)
cv2.createTrackbar('UpperbH',winName,83,255,nothing)
cv2.createTrackbar('UpperbS',winName,255,255,nothing)
cv2.createTrackbar('UpperbV',winName,255,255,nothing)
while(1):#函数cv2.getTrackbarPos()范围当前滑块对应的值lowerbH=cv2.getTrackbarPos('LowerbH',winName)lowerbS=cv2.getTrackbarPos('LowerbS',winName)lowerbV=cv2.getTrackbarPos('LowerbV',winName)upperbH=cv2.getTrackbarPos('UpperbH',winName)upperbS=cv2.getTrackbarPos('UpperbS',winName)upperbV=cv2.getTrackbarPos('UpperbV',winName)#得到目标颜色的二值图像,用作cv2.bitwise_and()的掩模img_target=cv2.inRange(img_original,(lowerbH,lowerbS,lowerbV),(upperbH,upperbS,upperbV))#输入图像与输入图像在掩模条件下按位与,得到掩模范围内的原图像img_specifiedColor=cv2.bitwise_and(img_original,img_original,mask=img_target)cv2.imshow(winName,img_specifiedColor)if cv2.waitKey(1)==ord('q'):break
cv2.destroyAllWindows()

GIF效果如下:

#欢迎关注我的微信公众号

利用openCV+python进行HSV颜色识别,并结合滑动条动态改变目标颜色相关推荐

  1. opencv+python+OpenPose姿态实时识别

    opencv+python+OpenPose 姿态实时识别 1.姿态识别 标记 颈.肩.肘.腕.腰.膝.踝 等特征点进行姿态识别,这些关节都有一定程度的自由度. 2.OPenPose OpenPose ...

  2. python中import cv2遇到的错误及安装方法_独家利用OpenCV,Python和Ubidots来构建行人计数器程序(附代码amp;解析)...

    作者:Jose Garcia 翻译:吴振东 校对:张一豪 本文约4000字,建议阅读14分钟. 本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲 ...

  3. OpenCV(基础补充)颜色空间HSV *args与**args(滑动条传参问题)

    目录 一.基础理论 1.Hue(色相) 2.Value(明度) 3.Saturation(饱和度) 二.hsv三通道及单通道效果 三.*args && **args *args: ** ...

  4. 【opencv3】滑动条调节RGB颜色阈值并输出滑动条的值

    一.实现目标 首先对图像 RGB 色彩空间进行分割,然后根据分割出来的各个通道的图像进行二值化处理,通过滑动条(cvCreateTrackbar)可以调节二值化的阈值. 二.程序1 // 利用滑动条调 ...

  5. 改变mysql的菜单栏的颜色_导航条——动态改变导航菜单的背景颜色

    1.概述 在浏览一些网站时,当鼠标经过导航菜单某一项时,其背景颜色将切换为其他颜色,实现这种简单的效果会更吸引浏览者的注意. 2.技术要点 本实例主要是应用JavaScript方法来动态改变 标签的背 ...

  6. WPF动态改变主题颜色

    国内的WPF技术先行者周银辉曾介绍过如何动态改变应用程序的主题样式,今天我们来介绍一种轻量级的改变界面风格的方式--动态改变主题色. 程序允许用户根据自己的喜好来对界面进行配色,这种技术在很多软件中都 ...

  7. FastReport动态改变字体颜色

    项目场景: 客户配置了彩色打印机,要求打印护士排班表时,支持班次颜色这个字段的彩打 问题描述: 颜色不是固定的,是程序里面动态配置的 解决方案: 处理打印数据源的时候,需要将颜色值作为变量,动态的转为 ...

  8. 点击echarts柱状图动态改变数据项颜色样式

    首先附上参考文章连接:https://blog.csdn.net/weixin_42870683/article/details/103528254添加链接描述 今天来实现点击echarts柱状图,动 ...

  9. mpvue微信小程序中使用svg图标,并通过代码动态改变图标颜色

    微信小程序,mpvue中使用svg图标,并通过代码改变图标颜色 本文主要是mpvue开发小程序的代码,不过微信小程序原生开发应该也是一样的,思路都是通用的,按照这个思路微信小程序原生开发一样可以实现同 ...

最新文章

  1. 建神经网络模型,哪种优化算法更好?35000次测试告诉你丨图宾根大学出品
  2. AlphaGo之后,DeepMind重磅推出AlphaFold:基因序列预测蛋白质结构
  3. 公有云和私有云,哪种是大势所趋?
  4. nmp的php.ini,Just for fun——Docker做个NMP环境
  5. 微服务架构崛起 能否成为下一代云计算?
  6. 长安大学第三届ACM-ICPC程序设计竞赛 L题
  7. 前端学习(2529):搭建中央管理
  8. 内卷到逆天!机器学习领域不读PhD,我配不配找工作?
  9. UIWebView清空本地缓存
  10. 线性代数的本质与几何意义 01. 向量是什么?(3blue1brown 咪博士 图文注解版)
  11. visio 2013安装教程
  12. web 打印时 表格多页 导致缺少线段 看上去页面不完整的处理方案
  13. 马哥linux架构班笔记,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  14. arduino的L298N电机驱动模块
  15. server是什么意思
  16. HTML5 进阶系列:文件上传下载
  17. 大学计算机实验基础第二版,大学计算机基础实验指导(第2版)
  18. js技巧收集(200多个)——2
  19. Auto.js 简单悬浮开关
  20. 中国杀软套路深:CIA怼遍全世界竟然干不过它

热门文章

  1. rabbitmq安装、卸载重装及错误排查
  2. 倍福--连接欧姆龙EtherCAT伺服案例
  3. win7冒险岛java_冒险岛不兼容win7怎么办|解决win7冒险岛不兼容的方法
  4. if 和 eif语句
  5. 教育城域网内网测速方法
  6. 未标注目标语料是否均适合用于跨语言学习?『基于对抗判别器高效利用未标注语料的跨语言NER算法AdvPicker』
  7. 2023全国特种作业操作证压力焊模拟考试试卷一[安考星]
  8. Fast R-CNN与ROI Pooling
  9. 项目管理师(高级)论文
  10. 计算机专业课改理念,课改新理念