Python-树莓派 + Opencv 实现颜色的识别

我这里使用了两个颜色来做测试
分别是红色和蓝色
当摄像头前面是红色的时候就打印出 Red
当摄像头前面是蓝色的时候就打印出 Blue

import numpy as np
import cv2

red_lower = np.array([0,43,46])
red_upper = np.array([10,255,255])
blue_lower = np.array([100,43,46])
blue_upper = np.array([124,255,255])
cap = cv2.VideoCapture(0)

cap.set(3,320)
cap.set(4,240)
def ChestRed():
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    mask = cv2.inRange(hsv, red_lower, red_upper)
    mask = cv2.erode(mask, None, iterations=2)
    mask = cv2.GaussianBlur(mask, (3, 3), 0)
    return mask
def ChestBule():
    ret, frame = cap.read()
    frame = cv2.GaussianBlur(frame, (5, 5), 0)
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    mask = cv2.inRange(hsv, blue_lower, blue_upper)
    mask = cv2.GaussianBlur(mask, (3, 3), 0)
    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
    if 25 < len(cnts) < 29:
        print("Blue!")
while 1:
    ret,frame = cap.read()
    frame = cv2.GaussianBlur(frame,(5,5),0)
    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)
    mask = ChestRed()
    ChestBule()
    res = cv2.bitwise_and(frame,frame,mask=mask)
    cnts = cv2.findContours(mask.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]
    if 20<len(cnts)<30:
        print("Red!")

    cv2.imshow("mask",mask)
    cv2.imshow("res",res)
    if cv2.waitKey(5) == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

用电脑测试成功
Python-树莓派 + Opencv 实现颜色的识别_第1张图片
Python-树莓派 + Opencv 实现颜色的识别_第2张图片
Python-树莓派 + Opencv 实现颜色的识别_第3张图片
现在是可以检查出颜色了,如果要移植到树莓派上的话也是可以的
就是前提得是树莓派上的opencv版本是3以上

你可能感兴趣的:(树莓派,Python)