OpenCV改变颜色空间

目标

  • 在本教程中,您将学习如何将图像从一种颜色空间转换为另一种颜色空间,如bgr。\leftrightarrow格雷湾\leftrightarrowHSV等
  • 此外,我们还将创建一个在视频中提取有色对象的应用程序。
  • 您将学习以下功能:cv2.cvtColor()cv2.inRange()

变色空间

OpenCV中有超过150种颜色空间转换方法。但是我们将只研究两种最广泛使用的BGR\leftrightarrow灰色与BGR\leftrightarrowHSV。对于颜色转换,我们使用以下函数cv2.cvtColor(input_image, flag)其中flag确定转换的类型。BGR\rightarrow灰色转换我们使用flag cv2.COLOR_BGR2GRAY。同样适用对于BGR\rightarrowHSV,我们用flag cv2.COLOR_BGR2HSV。要获得其他标志,只需在Python终端中运行以下命令:

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

目标跟踪

现在我们知道如何将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_green, upper_green)

    # 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()

下图显示蓝色物体的跟踪:

如何找到HSV值来跟踪?

它非常简单,您可以使用相同的功能,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范围。

猜你喜欢

转载自blog.csdn.net/rongpeisheng666/article/details/81607268