2016-04-14 29 views
1

我已经编写了检测浅粉色的代码。现在我想添加一个代码,它会在检测到淡粉色后自动关闭网络摄像头。你能帮我解决这个问题吗? 这里的EDITED代码:在检测到特定颜色后停止摄像头

import cv2 
import numpy as np 

cap = cv2.VideoCapture(0) 

while(1): 
    _, frame = cap.read() 

    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 

    lower_pink = np.array([160,50,50]) 
    upper_pink = np.array([180,255,255]) 

    mask = cv2.inRange(hsv, lower_pink, upper_pink) 

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

if(cv2.countNonZero(mask) > 0): 
    print("FOUND") 
    raise SystemExit 

cv2.destroyAllWindows() 
+0

当你的面具说你已经找到了粉红色的颜色时(即至少掩模中的某些数量的像素不为零),你可以退出。就像是; 'if(cv2.countNonZero(mask)> threshold):break' – Miki

+0

我是图像处理和所有这些新手。那么你可以添加我应该写的阈值吗? 因为当我把它归零并运行代码。窗口(hsv,mask,res)以毫秒关闭。 – Maxi

+0

你的粉红色斑点的最小尺寸是多少?你应该确保不要因为一些嘈杂的粉红点而关闭。您可以将其设置为10,20,50,100,并查看最佳效果。更好的方法是获得面罩中最大斑点的尺寸,并将其退出足够大。对于嘈杂点,这将更加健壮。 – Miki

回答

0

与无条件break(没有可能continue)一个循环是没有意义的,因为那是语义没有循环。

测试必须在循环内,因为您想将其应用于每个捕获的图像,直到您打到第一个足够的粉红色。然后break循环。不要在此退出程序,因为循环后的清理代码不再执行。无论如何,通过提高SystemExit退出有点奇怪,这就是sys.exit()函数所要做的。

import cv2 
import numpy as np 

def main(): 
    lower_pink = np.array([160, 50, 50]) 
    upper_pink = np.array([180, 255, 255]) 
    threshold = 100 # TODO Adapt to your needs. 
    cap = cv2.VideoCapture(0) 

    while True: 
     _, frame = cap.read() 
     hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
     mask = cv2.inRange(hsv, lower_pink, upper_pink) 
     masked = cv2.bitwise_and(frame, frame, mask=mask) 
     cv2.imshow('frame', frame) 
     cv2.imshow('mask', mask) 
     cv2.imshow('masked', masked) 
     # if cv2.countNonZero(mask) > threshold: 
     #  print('FOUND') 
     #  break 
     print(cv2.countNonZero(mask)) 
     # 
     # Wait for escape key. 
     # 
     if cv2.waitKey(500) == 27: 
      break 

    cv2.destroyAllWindows() 


if __name__ == '__main__': 
    main() 

将实际阈值测试注释掉,并替换为打印蒙版的像素数,以便确定哪个值适合您的需求。

+0

嘿谢谢你纠正我。我是初学者。 代码确实工作正常,但问题是它甚至没有显示掩码和结果窗口,我在几毫秒内收到FOUND消息。我甚至试图改变门槛值,但结果相同。代码工作正常或有问题? – Maxi

+0

我已经更改了代码,以便您可以测试不同环境(对象,照明...)下蒙版具有多少像素。 – BlackJack