目标
- 在本教程中,您将学习如何将图像从一个色彩空间转换为另一个色彩空间,如BGRGray,BGRHSV等。
- 除此之外,我们还将创建一个应用程序,用于在视频中提取彩色对象
- 您将学习以下函数:,等
改变色彩空间
OpenCV中有150多种颜色空间转换方法。但我们只会研究使用最广泛的两种,BGRGray和BGRHSV。
对于颜色转换,我们使用函数cv.cvtColor(input_image,flag),其中flag确定转换的类型。
对于BGR灰度转换,我们使用标志cv.COLOR_BGR2GRAY。同样对于BGRHSV,我们使用标志cv.COLOR_BGR2HSV。要获得其他标志,只需在Python终端中运行以下命令:
import cv2 as cvflags = [i for i in dir(cv) if i.startswith('COLOR_')]
print( flags )
注意:
对于HSV,色调范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。不同的软件使用不同比例。因此,如果您正在比较OpenCV值与他们,您需要规范化这些范围。
对象跟踪
现在我们知道如何将BGR图像转换为HSV,我们可以使用它来提取有色物体。在HSV中,表现颜色比在BGR色彩空间中更容易。在我们的应用程序中,我们将尝试提取蓝色的对象。所以这里是方法:
- 拍摄视频的每一帧
- 从BGR转换到HSV色彩空间
- 我们将HSV图像限定为一系列蓝色
- 现在单独提取蓝色对象,我们可以在我们想要的图像上做任何事情。
程序:
import cv2 as cvimport numpy as np
cap = cv.VideoCapture('test1.avi')
while(1):
cv.destroyAllWindows()
下图显示了蓝色和红色血条的跟踪:
如何找到跟踪的HSV值?
它非常简单,您可以使用相同的函数。您只需传递您想要的BGR值,而不是传递图像。例如,要查找Green的HSV值,请尝试在Python终端中执行以下命令:
程序:
import cv2 as cv
import numpy as np
green = np.uint8([[[0,255,0]]])
hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
print(hsv_green)
现在分别取[H-10,100,100]和[H + 10,255,255]作为下限和上限。除此方法外,您可以使用任何图像编辑工具(如GIMP或任何联机转换器)来查找这些值,但不要忘记调整HSV范围。