【OpenCv-Python】九、Changing Colorspaces

标签: OpenCv Python 图像识别 物体追踪 图像空间转换
38人阅读 评论(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)
查看评论

Opencv-Python教程

  • 2017年01月26日 12:30
  • 4.48MB
  • 下载

OpenCV-Python 中文教程(完整目录)

  • 2018年04月17日 10:44
  • 5.17MB
  • 下载

06 06 : tutorial-arm based on ffmpeg operated on s3c6410

 在板子上,第一次成功运行基于ffmpeg的代码。   [root@Real6410 /zhangbin]# ./tut*arm dodge.mpg                          ...
  • commshare
  • commshare
  • 2011-06-06 22:52:00
  • 2024

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

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

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

这个周的项目进度主要是导入了opencv-python库,以及实现视频的捕获的功能。 我们已经搭建好了果蔬秤的串口通信程序,接下来要做的是搭好opencv-python库的环境,然后通过python...
  • github_27587443
  • github_27587443
  • 2017-06-04 15:46:51
  • 338

opencv-python 支持python2 32位

  • 2017年04月07日 16:17
  • 23.63MB
  • 下载

opencv-python安装文件

  • 2017年08月23日 19:20
  • 37.87MB
  • 下载

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

转自VC错误:http://www.vcerror.com/?p=2044 问题描述: 给passwd文件加权限,修改/etc/passwd目录下所有的文件夹属性为可写可读可执行,执行以下命令:c...
  • swanabin
  • swanabin
  • 2015-09-28 17:56:49
  • 7880

Opencv-python的安装文件cv.pyd

  • 2017年01月26日 12:24
  • 34.24MB
  • 下载

opencv-python的dll

  • 2017年08月23日 19:10
  • 51KB
  • 下载
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 13万+
    积分: 3327
    排名: 1万+
    微信公众号
    课程设计、视频资源、有料趣文
    Worldhello


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