如何在相机拍摄蓝色时打印文字?

时间:2015-07-17 13:19:59

标签: python opencv numpy

我正在使用opencv和python编写脚本,以便在相机捕获某种颜色时打印文本。我尝试使用if语句,但它失败了。

这是我的代码:

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 blue color in HSV
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    result = lower_blue + upper_blue

    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # Bitwise-AND mask and original image
    res = cv2.bitwise_and(frame,frame, mask= mask)

    if result.any() == True:
       print 'I can see blue color'

    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)
    cv2.imshow('res',res)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:1)

我找到了适用于我的环境的解决方案。我正在使用Python 2.7和OpenCV 2.4.6。您可能需要修改blue_threshold值以满足您的需求。

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
blue_threshold = 1000000  # This value you could change for what works best

while True:

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

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

    # define range of blue color in HSV
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])

    # Threshold the HSV image to get only blue colors
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    count = mask.sum()

    if count > blue_threshold:
       print 'I can see blue color'


    cv2.imshow('frame',frame)
    cv2.imshow('mask',mask)

    k = cv2.waitKey(5) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()