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. P5471- K-D tree优化建图-弹跳

    P5471- K-D tree优化建图-弹跳 优化建图是一种思想. 题意 有\(n\)个城市分布在小鸟岛上,有\(m\)个弹弓分布在这些城市里.因为弹弓体积大,固定麻烦,所以每个弹弓只能把小鸟弹飞到一 ...

  2. kafka单机环境配置以及基本操作

    安装地址(已亲测有效):https://www.linuxidc.com/Linux/2019-03/157650.htm

  3. jvm源码解读--03 常量池的解析ConstantPool

    先看bt栈 (gdb) bt #0 ConstantPool::allocate (loader_data=0x7fe21802e868, length=87, __the_thread__=0x7f ...

  4. Floyd弗洛伊德算法

    先看懂如何使用 用Java实现一个地铁票价计算程序 String station = "A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A1 ...

  5. 构建前端第13篇之---VUE的method:{}的括号未括到方法导致 _vm.linkProps is not a function

  6. solr(CVE-2019-0193)远程命令执行

    影响版本 Apache Solr < 8.2.0 并且开启了DataImportHandler模块(默认情况下该模块不被启用) 安装 重启daoker  更新配置文件 systemctl dae ...

  7. MERCY靶机

    仅供个人娱乐 靶机信息 下载地址:https://drive.google.com/uc?id=1YzsW1lCKjo_WEr6Pk511DXQBFyMMR14y&export=downloa ...

  8. Appium使用inspactor开始session报"Could not connect to server; are you sure it's running?"

    appium在使用inspactor start session时提示:Could not connect to server; are you sure it's running?如下图 解决方案为 ...

  9. MIPS汇编学习

    MIPS汇编学习 mips汇编不同于x86汇编,属于精简指令集,常见于路由器等一些嵌入式设备中. mips汇编没有对堆栈的直接操作,也就是没有push和pop指令,mips汇编中保留了32个通用寄存器 ...

  10. 深入理解jvm-2Edition-类文件结构

    概述: 规范而独立的类文件结构以及只与类文件关联的虚拟机为Java实现了平台无关性,甚至还带来了一些语言无关性. 只要将源代码编译为Class文件规定的格式,JVM就可以执行. JVM的指令描述能力比 ...