OpenCV_Python API 官方文档学习_ cv2 Changing Colorspaces

官方官方文档

Goal

  • In this tutorial, you will learn how to convert images from one color-space to another, like BGR \leftrightarrow Gray, BGR \leftrightarrow HSV etc.
  • In addition to that, we will create an application which extracts a colored object in a video
  • You will learn following functions : cv2.cvtColor()cv2.inRange() etc.

实现目标:

1. 学习如何将图像从一种颜色空间转换为另一种颜色空间。比如:BGR与灰度图互转,BGR与HSV互转等等。

2. 除此之外,我们还将创建一个应用程序来提取视频中的有色对象。

3. 学习函数  cv2.cvtColor()cv2.inRange()  等


改变颜色空间

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

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

        对于BGR \leftrightarrow Gray,我们使用标志cv2.COLOR_BGR2GRAY。类似地,对于BGR \leftrightarrow HSV,我们使用标志cv2.COLOR_BGR2HSV。要获得其他flag,只需在Python终端中运行以下命令:

>>> import cv2
>>> flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
>>> print flags
      对于HSV,Hue范围为[0,179],Saturation 范围为[0,255],Value 范围为[0,255]。不同的软件使用不同的划分。因此,如果您要将OpenCV值与它们进行比较,则需要将这些范围规范化。

对象追踪

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

  • 获取视频中的每一帧图像
  • 从bgr转换到hsv颜色空间

  • 我们将HSV图像的阈值设置为蓝色。

  • 单独提取蓝色对象,我们可以对图像做任何操作

下面演示代码:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):

    # Take each frame
    _, frame = cap.read()

    # Convert BGR to HSV
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # define range of blue color in HSV
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])

    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # Bitwise-AND mask and original image
    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()

小贴士:

1、图像中有一些噪声。我们将在后面的学习中看到如何避免它们。

2、这是目标跟踪中最简单的方法。一旦你学会了轮廓的功能,你就可以做很多事情,比如找出这个物体的质心,然后用它来跟踪物体,只需在相机前移动你的手就可以画出图表和许多其他有趣的东西。





其中,第一幅图为原始图片,第二幅为标记图片,第三幅为过滤后,只留蓝色色素的图片。可以看出效果还是非常不错的。

如何找到HSV值跟踪?

      这是在 stackoverflow.com 上常见的问题。它非常简单,您可以使用相同的函数cv2.cvtColor()。与其传递图像,不如传递所需的BGR值。例如,要查找Green的HSV值,请尝试在Python终端中执行以下命令:

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

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值