目标

  • 在本教程中,你将学习如何将图像从一个色彩空间转换到另一个,像BGR↔灰色,BGR↔HSV等

  • 除此之外,我们还将创建一个应用程序,以提取视频中的彩色对象

  • 你将学习以下功能:cv.cvtColorcv.inRange等。

改变颜色空间

OpenCV中有超过150种颜色空间转换方法。但是我们将研究只有两个最广泛使用的,BGR↔灰色和BGR↔HSV。

对于颜色转换,我们使用cv函数。cvtColor(input_image, flag),其中flag决定转换的类型。

对于BGR→灰度转换,我们使用标志cv.COLOR_BGR2GRAY。类似地,对于BGR→HSV,我们使用标志cv.COLOR_BGR2HSV。要获取其他标记,只需在Python终端中运行以下命令:

>>> import cv2 as cv
>>> flags = [i for i in dir(cv) if i.startswith('COLOR_')]
>>> print( flags )

注意
HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。不同的软件使用不同的规模。因此,如果你要将OpenCV值和它们比较,你需要将这些范围标准化。

对象追踪

现在我们知道了如何将BGR图像转换成HSV,我们可以使用它来提取一个有颜色的对象。在HSV中比在BGR颜色空间中更容易表示颜色。在我们的应用程序中,我们将尝试提取一个蓝色的对象。方法如下:

  • 取视频的每一帧

  • 转换从BGR到HSV颜色空间

  • 我们对HSV图像设置蓝色范围的阈值

  • 现在单独提取蓝色对象,我们可以对图像做任何我们想做的事情。

下面是详细注释的代码:

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):# 读取帧_, frame = cap.read()# 转换颜色空间 BGR 到 HSVhsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)# 定义HSV中蓝色的范围lower_blue = np.array([110,50,50])upper_blue = np.array([130,255,255])# 设置HSV的阈值使得只取蓝色mask = cv.inRange(hsv, lower_blue, upper_blue)# 将掩膜和图像逐像素相加res = cv.bitwise_and(frame,frame, mask= mask)cv.imshow('frame',frame)cv.imshow('mask',mask)cv.imshow('res',res)k = cv.waitKey(5) & 0xFFif k == 27:break
cv.destroyAllWindows()

下图显示了对蓝色对象的跟踪:

注意
图像中有一些噪点。我们将在后面的章节中看到如何删除它们。
这是对象跟踪中最简单的方法。一旦学习了轮廓的功能,你就可以做很多事情,例如找到该对象的质心并使用它来跟踪对象,仅通过将手移到相机前面以及其他许多有趣的东西就可以绘制图表。

如何找到要追踪的HSV值?

这是在stackoverflow.com上发现的一个常见问题。它非常简单,你可以使用相同的函数cv.cvtColor()。你只需传递你想要的BGR值,而不是传递图像。例如,要查找绿色的HSV值,请在Python终端中尝试以下命令:

>>> green = np.uint8([[[0,255,0 ]]])
>>> hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
>>> print( hsv_green )
[[[ 60 255 255]]]

现在把[H- 10,100,100][H+ 10,255, 255]分别作为下界和上界。除了这个方法之外,你可以使用任何图像编辑工具(如GIMP或任何在线转换器)来查找这些值,但是不要忘记调整HSV范围。

练习题

1.尝试找到一种方法来提取多个彩色对象,例如,同时提取红色,蓝色,绿色对象。

☆☆☆为方便大家查阅,小编已将OpenCV-Python专栏文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“文章”,如图:

或点击下方“阅读原文”,进入OpenCV-Python专栏,即可查看系列文章。

不断更新资源

获取更多精彩

长按二维码扫码关注

OpenCV系列之改变颜色空间 | 十三相关推荐

  1. 【原创】OpenCV-Python系列之改变颜色空间(十三)

    从本次教程开始,我们正式进入基础篇的学习,OpenCV图像处理中最重要的一环就是图像的颜色空间,我们在之前已经见到过关于图像灰度化的例子,但这仅仅是其中的一种. 颜色空间 色彩/颜色空间(英语:Col ...

  2. Opencv图像处理之改变颜色空间

    本节中,你将学习到 如何改变图像颜色空间 1.如何将图像从一个色彩空间转换到另一个,像BGR-->灰色,BGR-->HSV 等 2.创建应用程序,提取视频中的彩色对象 1.如何将图像从一个 ...

  3. opencv converTO()函数 转换图像的数据类型不改变通道数,注意与cvtColor()改变颜色空间/彩色空间/色彩空间函数区分

    注意与cvtColor()函数的区别,cvtColor改变颜色空间,通道数也会改变,converTo只改变数据类型,不改变通道数,原来是几个通道转换后还是几个通道 示例: src.convertTo( ...

  4. OpenCV中的图像处理 —— 改变颜色空间+图像几何变换

    OpenCV中的图像处理 -- 改变颜色空间+图像几何变换 这一部分主要介绍OpenCV图像处理中的改变颜色空间和图像的几何变换,颜色空间的改变应用非常广泛,在处理图像的实际问题中,经常需要要图像变换 ...

  5. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  6. 【opencv系列08】OpenCV4.X图像融合操作

    点击上方"AI搞事情"关注我们 图像叠加 add(src1, src2, dst=None, mask=None, dtype=None)函数或者numpy操作实现图像按位相加,若 ...

  7. OpenCV 色彩空间的改变

    OpenCV中有150多种颜色空间转换方法.最广泛使用的转换方法有两种,BGR与Gray之间的转换和BGR与HSV之间的转换. cv.cvtColor(input_image, flag) input ...

  8. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  9. OpenCV学习笔记(三十一)——让demo在他人电脑跑起来 OpenCV学习笔记(三十二)——制作静态库的demo,没有dll也能hold住 OpenCV学习笔记(三十三)——用haar特征训练自己

    OpenCV学习笔记(三十一)--让demo在他人电脑跑起来 这一节的内容感觉比较土鳖.这从来就是一个老生常谈的问题.学MFC的时候就知道这个事情了,那时候记得老师强调多次,如果写的demo想在人家那 ...

最新文章

  1. (转载)Google Analytics(Google分析)使用技巧
  2. 关于tesseract 出错信息:read_params_file: Can't open chi_sim
  3. js日历代码_JS无形装逼,最为致命
  4. Matlab中plot函数绘图基本用法
  5. 常见电容器图片_各种电容器图片大集合
  6. #3601. 一个人的数论
  7. 纪中A组模拟赛总结(2021.7.16)
  8. SpringBoot如何切换Redis默认库
  9. python画同心圆程序_Python Turtle:使用circle()方法绘制同心圆
  10. 资源 ACCP-S1 BOOK3开发工具的下载
  11. python 放射 水平_基于Python的放射性核素大气扩散程序初步开发与验证
  12. 【学习笔记】信息系统项目管理-项目採购管理-合同分类
  13. Black Salt Audio All Plug-Ins Mac 实用音频压缩插件套装
  14. java 传递intent_intent传递参数
  15. mysql实现不重复插入数据
  16. 【推荐】智慧医疗应用和研究资料合集
  17. php 微信上传多张图片,php,微信_微信jssdk能上传多张图片吗?,php,微信,javascript - phpStudy...
  18. 现代计算机的工作原理是什么和什么,计算机的工作原理是什么
  19. linux 通过关键字查询到进程,并kill掉
  20. 实验一计算机网络基础知识,计算机网络实验基础知识 集线器的使用

热门文章

  1. 【转】何谓智能视频监控技术与应用
  2. Warframe(星际战甲) 大黄脸结合目标位置
  3. Git 提交代码时添加 emoji 图标
  4. C# FrameworkElement子类实现鼠标双击和鼠标单击事件
  5. idea 初始界面_IntelliJ IDEA欢迎界面
  6. bwt - search 算法
  7. 首个国产脑外科手术机器人获批准产,王田苗教授指导打造
  8. 米兔积木机器人与履带机甲零件差别_米兔积木机器人履带机甲版怎么样 米兔积木机器人孩子喜欢吗...
  9. 额度策略矩阵,贷中的调额策略如何开发?
  10. truetype 字体的历史 来自维基百科