目标

在本教程中,您将学习如何将图像从一个颜色空间转换为另一个颜色空间,如BGR↔Gray,BGR↔HSV等。

除此之外,我们将创建一个在视频中提取彩色对象的应用程序

您将学习以下函数:cv2.cvtColor(),cv2.inRange()等

改变颜色空间

OpenCV中有超过150种颜色空间转换方法。

但是,我们将仅研究最广泛使用的两种,BGR↔Gray和BGR↔HSV。

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

对于BGR→灰度转换,我们使用标志cv2.COLOR_BGR2GRAY。

类似于BGR→HSV,我们使用标志cv2.COLOR_BGR2HSV。

要获得其他标志,只需在Python终端中运行以下命令:

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

注意

对于HSV,色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。

不同的软件使用不同的刻度。

因此,如果您将OpenCV值与它们进行比较,则需要对这些范围进行规范化。

对象跟踪

现在我们知道如何将BGR图像转换为HSV,我们可以使用它来提取彩色对象。

在HSV中,表示颜色比在BGR颜色空间中更容易。

在我们的应用程序中,我们将尝试提取一个蓝色的对象。

所以这里是方法:

拍摄视频的每一帧

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

results matching ""

    No results matching ""