关闭

【OpenCv-Python】九、Changing Colorspaces

标签: OpenCvPython图像识别物体追踪图像空间转换
28人阅读 评论(0) 收藏 举报
分类:

颜色空间转换

目标

  • 在本教程中,您将学习如何将图像从一个颜色空间转换为另一个颜色空间,如BGR——>Gray,BGR——>HSV 等。
  • 除此之外,我们还将创建一个应用程序,在视频中提取一个有色对象。
  • 你将要学习这些函数:cv2.cvtColor(),cv2.inRange()等

9.1 转换颜色空间

在OpenCV中有150多种颜色空间转换方法。但是我们将只研究其中最广泛使用的两种,BGR 与 Gray,BGR 与 HSV。
对于颜色转换,我们经常使用函数cv2.cvtColor(input_image, flag),其中 flag 决定转换的类型。
对于BGR 与 Gray 转换,我们使用flag 是 cv2.COLOR_BGR2GRAY。类似地,对于BGR 与 HSV,我们使用了flag 是 cv2.COLOR_BGR2HSV。要获取其他flag,只需在Python终端中运行以下命令:

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

注意

在 OpenCV 的 HSV 格式中 H(色彩/色度)的取值范围是 [0,179] S(饱和度)的取值范围 [0,255] V(亮度)的取值范围 [0,255]。但是不同的软件使用的值可能不同。所以当你需要拿 OpenCV 的 HSV 值与其他软件的 HSV 值对比时,一定记得归一化。

9.2 物体跟踪

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

  • 提取每一帧的视频
  • 将图像转换到HSV空间
  • 设置HSV图像阈值到蓝色范围
  • 现在提取蓝色物体,我们可以在图像上做任何我们想做的事情。

下面是有详细注释的代码:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):

    # 提取每一帧的视频
    _, frame = cap.read()

    # 将BGR转换为 HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 定义HSV中蓝色的范围
    #黑色lower_black = np.array([0,0,0]) upper_black = np.array([180,255,46])
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])

    # 根据阈值HSV 构建掩模
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # 对原图像和掩模进行位运算
    res = cv2.bitwise_and(frame,frame, mask= mask)

    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)
    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

注意:

图像中有一些噪声。我们将在后面的章节中看到如何删除它们。

这是对象跟踪中最简单的方法。一旦你学习了等高线的功能,你可以做很多事情,比如找到这个物体的质心,然后用它来跟踪物体,画出图,你的手在镜头前移动,还有很多其他有趣的东西。

9.3 如何找到要跟踪对象的HSV值?

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

green = np.uint8([[[0,255,0 ]]])
hsv_green = cv2.cvtColor(green,cv2.COLOR_BGR2HSV)
print(hsv_green)
0
0
查看评论

Opencv3.0-python的那些事儿:(二)、Opencv的颜色空间转换

# coding: utf-8 ''' 第13章主要介绍:颜色空间转换 ''' import cv2 import numpy as np ''' 经常用到的颜色空间转换是: BGRGray 和 BGRHSV cv2.cv...
  • qingyuanluofeng
  • qingyuanluofeng
  • 2016-06-03 22:30
  • 6548

项目进度(九) - 导入opencv-python库

这个周的项目进度主要是导入了opencv-python库,以及实现视频的捕获的功能。 我们已经搭建好了果蔬秤的串口通信程序,接下来要做的是搭好opencv-python库的环境,然后通过python调用Opencv函数来进行图像分析。 在python官网就能找到opencv-python...
  • github_27587443
  • github_27587443
  • 2017-06-04 15:46
  • 261

[iOS开发]使用GCD遇到的问题

最近在使用GCD遇到这样的问题,刚开始不是很明白,不能使用后台线程来修改autolayout引擎?后来查了一下问题,在iOS9 - This application is modifying the autolayout engine from a background thread — where...
  • shawjan
  • shawjan
  • 2015-11-19 17:28
  • 3273

Reason: Failed while changing version of java to 1.7

今天在切换java 1.7的时候遇到了问题,本来按照常规,方法很简单就解决了,可以后来折腾半小时。 项目因为需要切换至:1.7     问题描述: 项目右键-》Properties-》MyEclipse-》Project Facets -》ja...
  • nly19900820
  • nly19900820
  • 2016-06-30 10:24
  • 479

错误:chmod: changing permissions of ‘/etc/passwd': Read-only file system

给passwd文件加权限,修改/etc/passwd目录下所有的文件夹属性为可写可读可执行,执行以下命令:chomd 777 /etc/passwd 的时候提示错误: chmod: changing permissions of ‘/etc/passwd': Read-only ...
  • jackli8431
  • jackli8431
  • 2016-03-08 14:33
  • 4380

个人学习(九) - 导入opencv-python库

前面我们已经搭建好了python的串口通信程序,接下来要做的是搭好opencv-python库的环境,然后通过python调用Opencv函数来进行图像分析。 在python官网就能找到opencv-python库,如下图: 因为我的电脑上的python版本是3.5,系统为64位...
  • github_27587443
  • github_27587443
  • 2017-06-04 15:33
  • 1422

真正解决W10: Warning: Changing a readonly file,E45: 'readonly' option is set (add ! to override)

大家在linux上编辑文件的时候,明明是使用的root登录的,可是这种至高无上的权限在按下i的时候被那串红色错误亵渎了W10: Warning: Changing a readonly file 抱着试试看的态度更改了文件,保存的那一刻又被一串红色错误E45: 'readonly' ...
  • AKmumu2010
  • AKmumu2010
  • 2012-09-19 17:12
  • 11961

Android 4.2 由Context引发的思考

最近在做类似于三星S4的那种皮套(后面简称SmartCover),具有可操作的窗口,一方面用户可以保护手机屏幕,另一方面用户可以直接在SmartCover上接听电话,非常方便。在开发过程中发现一个问题,虽然最终解决但还是记录一下,好记性不如烂笔头啊。
  • yihongyuelan
  • yihongyuelan
  • 2013-10-12 12:33
  • 7642

[CLRS] Problems 16-1: Coin changing

link http://ripcrixalis.blog.com/2011/02/08/clrs-chapter-16/ Problems 16-1: Coin changing Consider the problem of making change for n cents us...
  • u012308776
  • u012308776
  • 2014-12-10 11:13
  • 820

Changing the Framework version requires a restart of the W3SVC service.

Changing the Framework version requires a restart of the W3SVC service. Alternatively, you can change the Framework version without restarting the W3S...
  • ldl22847
  • ldl22847
  • 2010-11-15 11:31
  • 4469
    个人资料
    • 访问:126506次
    • 积分:3214
    • 等级:
    • 排名:第12600名
    • 原创:187篇
    • 转载:4篇
    • 译文:9篇
    • 评论:33条
    RUNNING|~_~|My web
    微信公众号
    课程设计、视频资源、有料趣文
    Worldhello


    微信公众号:Worldhello
    期待您的关注!
    博客专栏
    最新评论