0.序言

之前的博客里我们介绍了opencv在图像上的基本操作,下面我们来进行稍微深入一点的介绍,从这里开始我们可以发现opencv库能给我们带来的更多更有趣的功能。从现在开始,我们将逐步深入了解opencv库中对图像处理的一些高级方式。

  • 在这篇博客中,我们将学习如何将图像在色彩空间之间的转换,例如BGR转换成灰色,BGR转换成HSV等
  • 此外,我们还将创建一个应用程序,以提取视频中的彩色对象
  • 我们还将学习以下功能:cv.cvtColor,**cv.inRange**等

1.改变颜色空间

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

对于颜色转换,我们使用cv函数。

  1. cvtColor(input_image, flag)

其中flag决定转换的类型。

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

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

需要注意的一点,HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。且不同的软件里使用不同的规模,这点细节需要注意。

2.对象追踪

因为在HSV空间中比在BGR颜色空间中更容易表示颜色。现在我们知道了如何将BGR图像转换成HSV,通过这种方式,我们可以就可以提取视频或图片中一个某个有颜色的对象。

例如下面的应用程序所示,我们将尝试提取一个蓝色的对象。方法如下:

  1. 取视频的每一帧 。
  2. 转换从BGR到HSV颜色空间 。
  3. 对HSV图像设置蓝色范围的阈值。
  4. 单独提取蓝色对象。

代码如下所示import cv2 as cv

  1. import numpy as np
  2. cap = cv.VideoCapture(0)
  3. while(1):
  4. # 读取帧
  5. _, frame = cap.read()
  6. # 转换颜色空间 BGR 到 HSV
  7. hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
  8. # 定义HSV中蓝色的范围
  9. lower_blue = np.array([110,50,50])
  10. upper_blue = np.array([130,255,255])
  11. # 设置HSV的阈值使得只取蓝色
  12. mask = cv.inRange(hsv, lower_blue, upper_blue)
  13. # 将掩膜和图像逐像素相加
  14. res = cv.bitwise_and(frame,frame, mask= mask)
  15. cv.imshow('frame',frame)
  16. cv.imshow('mask',mask)
  17. cv.imshow('res',res)
  18. k = cv.waitKey(5) & 0xFF
  19. if k == 27:
  20. break
  21. cv.destroyAllWindows()

  

效果就如图所示:

注意:图像中有一些噪点。我们将在后面的章节中看到如何删除它们。 这是对象跟踪中最简单的方法。一旦学习了轮廓的功能,我们就可以做很多事情,例如找到该对象的质心并使用它来跟踪对象等,这也是opencv库的强大之处。

opencv入门系列教学(七)改变颜色空间、提取彩色对象的更多相关文章

  1. opencv入门系列教学(六)图像上的算术运算(加法、融合、按位运算)

    0.序言 这一篇博客我们将学习图像的几种算术运算,例如加法,减法,按位运算等. 1.图像加法 我们可以通过OpenCV函数 cv.add() 或仅通过numpy操作 res=img1+img2 res ...

  2. opencv入门系列教学(四)处理鼠标事件

    一.鼠标事件的简单演示 opencv中的鼠标事件,值得是任何与鼠标相关的任何事物,例如左键按下,左键按下,左键双击等.我们先来看看鼠标事件有哪些,在python中执行下面代码: import cv2 ...

  3. OpenCV入门系列教学(三)绘制几何形状及添加文本

    一.绘制简单的几何形状和添加文本 opencv中绘制图形很简单,我们只需要使用下面这些常用函数即可. #画线 cv2.line() #画圆 cv2.circle() #画矩形 cv. rectangl ...

  4. opencv入门系列教学(二)图像入门:读取、展示并保存视频

    一.从相机读取视频 通常情况下,我们必须用摄像机捕捉实时画面.让我们从摄像头捕捉一段视频(我使用的是我笔记本电脑内置的网络摄像头) ,将其转换成灰度视频并显示出来.        要捕获视频,我们需要 ...

  5. openCV入门系列教学(一) 图像的读取、展示与保存

    序言 笔者最近做了两个CV领域的项目,因为数据量不足所以主要使用的是传统的CV方法.这时候不得不夸一句opencv库,让复杂的算法原理变得如此简单(调包调参侠表示很骄傲).所以闲暇下来对opencv的 ...

  6. opencv入门系列教学(五)图像的基本操作(像素值、属性、ROI和边框)

    0.序言 每个图像是由一个个点组成的,而这些点可以表示为像素值的形式. 这篇博客里我们将学会: 访问像素值并修改它们 . 访问图像属性 . 设置感兴趣区域(ROI) . 分割和合并图像. 对于图像的基 ...

  7. 【Go语言入门系列】(七)如何使用Go的方法?

    [Go语言入门系列]前面的文章: [Go语言入门系列](四)之map的使用 [Go语言入门系列](五)之指针和结构体的使用 [Go语言入门系列](六)之再探函数 本文介绍Go语言的方法的使用. 1. ...

  8. OpenCV入门笔记(七) 文字区域的提取

    https://blog.csdn.net/huobanjishijian/article/details/63685503 前面我们已经学了一些OpenCV中基本的图片处理的知识,可以拿来做一些小应 ...

  9. HTML5简单入门系列(七)

    前言 本篇详细介绍canvas画布的API.说是详细介绍,也只是一些常用的API及简单实例和说明.LZ本人也还没有看完全部,下篇会介绍剩余的一些内容. 本篇的示例中,LZ加入了注释,为的是只简单介绍A ...

随机推荐

  1. 每天五分钟Go - 指针

    什么是指针 一个指向内存地址的变量,称为指针变量,指针是一个特殊的变量,他的值存储的是另一个值的内存地址 指针变量的声明 var var_name *type var_name 是指针变量的名称,ty ...

  2. P4334 [COI2007] Policija

    P4334 [COI2007] Policija 题意 一个无重边的无向图,每次询问删掉一条边或删掉一个点后两个点是否联通. 思路 连通性问题,我们可以考虑使用广义圆方树解决. 对于删掉一个点的情况: ...

  3. 第1天 Mark Down 学习及DOS命令

    Markdown学习 标题 "#加空格"几个#就表示几级标题 字体 helloworld!一两个两个*号 helloworld!一边一个*号 helloworld! 一边三个号 h ...

  4. 《深入剖析Tomcat》源码

    <深入剖析Tomcat>翻译自<How Tomcat Works> 可以到官网下载:https://brainysoftware.com/download 官网下载比较慢,我就 ...

  5. 关于zend guard loard 扩展

    官网http://www.zend.com/en/products/loader/downloads#Linux 安装安装在READ.ME中 修改的php.ini是apache那边的 保存,重启下就行 ...

  6. Docker 网络解读

    Docker 容器在运行时,会涉及多个容器相互连接,甚至与宿主机上的应用连接的问题.既然需要产生连接,那么就必然要依赖网络. 网络在Docker的技术体系中,是一个不容易搞清楚的要点.因此,希望您读完 ...

  7. 浏览器中hook对象属性

    先获取window对象属性 来源: 夜幕爬虫安全论坛 原文链接: http://bbs.nightteam.cn/thread-485.htm?orderby=desc&user=7

  8. CTF之隐写总结

    目测要更很久,因为今年有一件非常重要的事要完成,希望一切顺利  All The Best.

  9. kali linux 的ssh服务器拒绝了密码 请再试一次

    1.配置kali linux下的SSH,默认情况下kali下的SSH不允许root用户远程登录SSH,需要修改配置文件 /etc/ssh/sshd_config,修改PermitRootLogin y ...

  10. JUC学习笔记(五)

    JUC学习笔记(一)https://www.cnblogs.com/lm66/p/15118407.html JUC学习笔记(二)https://www.cnblogs.com/lm66/p/1511 ...