如何使用OpenCV在Python中将单个BGR数组转换为HSV数组?
问题描述:
我正在为图像跟踪编写一个Python程序,其中我接收最小值和最大值的输入BGR值,然后过滤实时视频输入以仅显示最小值和最大值之间的值。当输入在BGR中时,我需要使用HSV过滤视频。但是,我无法弄清楚如何在numpy中将单个BGR输入数组转换为HSV数组,而无需在整个图像上使用cvtColor函数。如何使用OpenCV在Python中将单个BGR数组转换为HSV数组?
根据我的理解,cv2.cvtColor()函数似乎只适用于整个图像,但我需要能够将这些选择最小和最大BGR数组转换为HSV,然后再进行颜色跟踪。
每当我运行这段代码时,我都会从cvtColor函数调用的OpenCV代码中得到以下错误。
OpenCV Error: Assertion failed (depth == CV_8U || depth == CV_16U || depth == CV_32F) in cv::cvtColor, file D:\Build\OpenCV\opencv-3.2.0\modules\imgproc\src\color.cpp, line 9710
我已经使用BGR阵列,它的作品,但我特别需要在这里使用HSV尝试。
解决此问题的最简洁方法是什么?请让我知道我是否可以提供更多信息,谢谢。我对Python仍然很陌生。
minBGR = np.array([minB, minG, minR])
maxBGR = np.array([maxB, maxG, maxR])
minHSV = cv2.cvtColor(minBGR, cv2.COLOR_BGR2HSV)
maxHSV = cv2.cvtColor(maxBGR, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsvFrame, minHSV, maxHSV)
答
默认情况下,numpy
有必要举行这些最小类型创建数组。
在我的64位系统中,从0到255范围内的值创建数组会创建int64
阵列。
In [1]: import numpy as np
In [2]: np.array([0,0,0])
Out[2]: array([0, 0, 0])
In [3]: a = np.array([0,0,0])
In [4]: a.dtype
Out[4]: dtype('int64')
In [5]: a = np.array([255,255,255])
In [6]: a.dtype
Out[6]: dtype('int64')
这是一个8字节的整数:
In [20]: dt = np.dtype('>i8')
In [21]: dt.itemsize
Out[21]: 8
In [22]: dt.name
Out[22]: 'int64'
你可能想创建uint8
或uint16
阵列。
In [7]: a = np.array([0,0,0], dtype=np.uint8)
In [8]: b = np.array([255,255,255], dtype=np.uint8)
In [9]: a.dtype, b.dtype
Out[9]: (dtype('uint8'), dtype('uint8'))