2016-04-14 47 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