2016-12-06 88 views
0

我正在使用Raspberry Pi 3和Pi相机。我正在做一个图像处理程序,可以检测到黄色,现在我正在测试它,但在框架中什么也没有发生。我的颜色检测是错误的? 这里是我的代码:Python中的RGB颜色检测语言

import cv2 
import numpy as np 

cap = cv2.VideoCapture(0) 

while(1): 

    # Take each frame 
    _, frame = cap.read() 

    # Convert BGR to HSV 
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 

    # define range of yellow color in HSV 
    lower_yellow = np.array([204,204,0]) 
    upper_yellow = np.array([255,255,254]) 

    # Threshold the HSV image to get only yellow colors 
    mask = cv2.inRange(hsv, lower_yellow, upper_yellow) 

    # 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() 

回答

0

的问题是,你筛选的看上去是RGB值的HSV图像。如果你在寻找黄色,那么你想要一个窄的色调范围,然后饱和度和价值更广。

黄色对于色调大致为60度,这意味着OpenCV的值大约为30(因为色相值是可以在0-255范围内适合的度数值的一半)。同样,你的饱和度和值不应该是0-255的全部范围,否则接近黑色或白色的东西将匹配。

试着这么做

lower_yellow = np.array([20, 30, 30]) 
upper_yellow = np.array([40, 200, 300]) 

希望这将让你关闭,但你可能还是要玩的数字来得到你想要的。

+0

它的工作原理。谢谢。我怎样才能决定这个数字? – user

+0

这实际上主要是试验和错误,取决于你想要做什么。你可以看看HSV滑块(如http://colorizer.org/)来指出你正确的方向。 – Iluvatar