Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python opencv颜色跟踪_Python_Opencv - Fatal编程技术网

python opencv颜色跟踪

python opencv颜色跟踪,python,opencv,Python,Opencv,下面是我跟踪白色对象的python代码。 它能工作——但只持续几秒钟,然后整个屏幕变黑,有时甚至不能工作。我尝试了蓝色,它能工作——但白色和绿色给我带来了问题: import cv2 import numpy as np cap = cv2.VideoCapture(0) while(1): _, frame = cap.read() hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) # define range of white color in

下面是我跟踪白色对象的python代码。
它能工作——但只持续几秒钟,然后整个屏幕变黑,有时甚至不能工作。
我尝试了蓝色,它能工作——但白色和绿色给我带来了问题:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):

_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

# define range of white color in HSV
# change it according to your need !
sensitivity = 15
lower_white = np.array([0,0,255-sensitivity])
upper_white = np.array([255,sensitivity,255])

# Threshold the HSV image to get only white colors
mask = cv2.inRange(hsv, lower_white, upper_white)
# 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()

首先,你应该知道你使用的是什么颜色空间。 只是OpenCV中
Mat
类型
CV_8UC3
的颜色空间的一个小教程。(来自维基百科的图片)

高速列车

在HSV(色调、饱和度、值)颜色空间中,H表示颜色的主色,S表示颜色的饱和度,V表示亮度。在OpenCV中,范围是不同的。S、 V在[0255]中,而H在[0180]中。通常H在[0360](整圈)范围内,但为了适应一个字节(256个不同的值),它的值被减半

在HSV空间中更容易分离单一颜色,因为您可以简单地为H设置适当的范围,并且只需注意S不太小(它几乎是白色),V不太小(它将是黑色)

例如,如果你需要几乎蓝色的颜色,你需要H在120左右(比如在[110130]中),S,V不太小(比如在[100255]中)

白色不是色调(彩虹中没有白色),而是颜色的组合

在HSV中,您需要获取所有范围的H(H在[0,180]中)、非常小的S值(例如[0,25]中的S)和非常高的V值(例如[230,255]中的V)。这基本上对应于圆锥体中心轴的上部


因此,要使其跟踪HSV空间中的白色对象,您需要:

lower_white = np.array([0, 0, 230])
upper_white = np.array([180, 25, 255])
或者,由于您定义了灵敏度值,例如:

sensitivity = 15
lower_white = np.array([0, 0, 255-sensitivity])
upper_white = np.array([180, sensitivity, 255])
对于其他颜色:

green = 60;
blue = 120;
yellow = 30;
...
sensitivity = 15

// Change color with your actual color
lower_color = np.array([color - sensitivity, 100, 100]) 
upper_color = np.array([color + sensitivity, 255, 255])
红色H值为0,因此需要取两个范围并将其“或”在一起:

sensitivity = 15
lower_red_0 = np.array([0, 100, 100]) 
upper_red_0 = np.array([sensitivity, 255, 255])
lower_red_1 = np.array([180 - sensitivity, 100, 100]) 
upper_red_1 = np.array([180, 255, 255])

mask_0 = cv2.inRange(hsv, lower_red_0 , upper_red_0);
mask_1 = cv2.inRange(hsv, lower_red_1 , upper_red_1 );

mask = cv2.bitwise_or(mask1, mask2)
现在,你应该能够跟踪任何颜色