HSV(hue saturation value)

色调(hue):对应于颜色成分(基础色素),因此,只需选择一个色调范围,就可以选择任何颜色。(0—360)

饱和度(saturation):颜色的数量(颜料的深度)(主导色调)(0—100%)

值(value):颜色的亮度。(0—100%)


H - 色调(主导波长)。
S - 饱和度(颜色的纯度/色调)。
V - 值(强度)。

对于HSV,Hue范围是[0,179],饱和范围是[0,255],值范围是[0,255]

OPENCV HSV像素点遍历 opencv中hsv_颜色空间


1、学习目标

使用HSV色彩空间进行物体检测和物体跟踪

(1)使用色调饱和度值(HSV)颜色模型实现基于颜色和形状的对象检测和跟踪。

(2)使用cv :: inRange(OpenCV)为色彩检测选择正确的上下HSV边界

(3)使用轨迹栏。

2、函数方法

cv2.cvtColor()

cv2.inRange()

3、程序

(1)探测物体

OPENCV HSV像素点遍历 opencv中hsv_数据类型_02


原图

OPENCV HSV像素点遍历 opencv中hsv_颜色空间_03


处理结果

OPENCV HSV像素点遍历 opencv中hsv_颜色空间_04


OPENCV HSV像素点遍历 opencv中hsv_颜色空间_05


(2)使用轨道棒探测物体

OPENCV HSV像素点遍历 opencv中hsv_OPENCV HSV像素点遍历_06

OPENCV HSV像素点遍历 opencv中hsv_数组_07


原图

OPENCV HSV像素点遍历 opencv中hsv_数据类型_08


结果

OPENCV HSV像素点遍历 opencv中hsv_数组_09

OPENCV HSV像素点遍历 opencv中hsv_数据类型_10


OPENCV HSV像素点遍历 opencv中hsv_数组_11


(3)使用轨道棒探测视频

OPENCV HSV像素点遍历 opencv中hsv_数据类型_12


OPENCV HSV像素点遍历 opencv中hsv_OPENCV HSV像素点遍历_13


原视频

OPENCV HSV像素点遍历 opencv中hsv_数据类型_14


处理结果

OPENCV HSV像素点遍历 opencv中hsv_OPENCV HSV像素点遍历_15


OPENCV HSV像素点遍历 opencv中hsv_数据类型_16


OPENCV HSV像素点遍历 opencv中hsv_OPENCV HSV像素点遍历_17


函数讲解:

(1)将图像从一个颜色空间转换为另一个颜色空间。

cv2.cvtColor(src, code[, dst[, dstCn]]) → dst
参数
src  - 输入图像:8位无符号,16位无符号(CV_16UC...)或单精度浮点。
dst  - 输出与大小和深度相同的图像src。
code - 颜色空间转换代码(参见下面的描述)。
dstCn- 目标图像中的通道数; 如果参数为0,则自动从src 和code导出通道数

程序中的例子

cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

在转换为RGB颜色空间的情况下,应明确指定通道的顺序(RGB或BGR)

(2)创建一个数组

numpy.array(object,dtype = None,copy = True,order ='K',subok = False,ndmin = 0 )

参数:
object : array_like
数组,公开数组接口的任何对象,__array__方法返回数组的对象,或任何(嵌套)序列。

dtype : 数据类型,可选
数组所需的数据类型。如果没有给出,那么类型将被确定为保持序列中的对象所需的最小类型。此参数只能用于“upcast”数组。对于向下转换,请使用.astype(t)方法。

copy : bool,可选
如果为true(默认值),则复制对象。否则,只有当__array__返回副本,obj是嵌套序列,或者需要副本来满足任何其他要求(dtype,顺序等)时,才会进行复制。

order:{'K','A','C','F'},可选
指定阵列的内存布局。如果object不是数组,则新创建的数组将按C顺序排列(行主要),除非指定了'F',在这种情况下,它将采用Fortran顺序(专业列)。如果object是一个数组,则以下成立。
		order	   no copy	       copy=True
		‘K’   	  unchanged 	F & C order preserved, otherwise most similar order
		‘A’	      unchanged    	F order if input is F and not C, otherwise C order
		‘C’	      C order	    C order
		‘F’	      F order	    F order


subok : bool,可选
如果为True,则子类将被传递,否则返回的数组将被强制为基类数组(默认)。

ndmin : int,可选
指定结果数组应具有的最小维数。为满足此要求,将根据需要预先设置形状。

returns:out  :ndarray
满足指定要求的数组对象。

(3)

inRange(src,lowerb, upperb[, dst]) -> dst
参数:
src:原数组,可以为单通道,多通道
lowerb: 下界
upperb: 上界

(a)单通道,
假设lower=[0],upper=[128]
对每个数在0-128之间为255,否则为0;

(b)多通道,
假设lower=[0,0,0],upper=[128,128,128,128]
对每一行,对任意一个数,如果在范围内,则255,否则0,最后的几个数相与,因此如果都是255,为255,否则为0