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

本文介绍了一种使用OpenCV进行颜色识别的方法,通过设置红色和蓝色的HSV阈值,实现了摄像头前颜色的实时判断。当检测到的颜色为红色时,程序会输出“Red”,而蓝色则输出“Blue”。该方法已在电脑上成功测试,并具备移植到树莓派的潜力,前提是树莓派需安装OpenCV 3及以上版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我这里使用了两个颜色来做测试
分别是红色和蓝色
当摄像头前面是红色的时候就打印出 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()

用电脑测试成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在是可以检查出颜色了,如果要移植到树莓派上的话也是可以的
就是前提得是树莓派上的opencv版本是3以上

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值