gpt4 book ai didi

Python OpenCV 颜色跟踪

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:06 25 4
gpt4 key购买 nike

下面是我用于跟踪白色物体的 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 中用于 CV_8UC3 类型的 Mat 颜色空间的小教程。 (图片来自维基百科)

单纯疱疹病毒

enter image description here

在 HSV(色相、饱和度、明度)颜色空间中,H 给出颜色主色,S 给出颜色的饱和度,V 给出亮度。在 OpenCV 中,范围不同。 S,V 在 [0,255] 中,而 H 在 [0, 180] 中。通常 H 在 [0,360](整圈)范围内,但为了适应一个字节(256 个不同的值),它的值减半。

在HSV空间中更容易分离单一颜色,因为你可以简单地为H设置合适的范围,注意S不要太小(它会接近白色),V不要太小(天会黑的)。

例如,如果您需要接近 blue 的颜色,则需要 H 的值在 120 左右(例如 [110,130]),并且 S,V 不能太小(例如 [100,255] ]).

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

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


因此,要使其跟踪 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)

现在您应该能够追踪任何颜色了!

关于Python OpenCV 颜色跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33761968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com