蓝色识别成功

  • 如果要理解这个程序,首先要弄清HSV的概念和数值范围:

如下图:

 这个程序是我从github上找的,做了简单的修改,成功实现了识别蓝色,识别效果不错。

 

import numpy as np
import cv2


def main():
    red_val = 0
    green_val = 114

    # 为视频Feed创建一个窗口
    # cv2.namedWindow('frame',cv2.CV_WINDOW_AUTOSIZE)

    # 使轨迹栏用于HSV屏蔽
    # cv2.createTrackbar('HSV','frame',0,255,getVal)

    # 从网络摄像头捕获视频
    cap = cv2.VideoCapture(0)

    while (True):
        # 逐帧捕获
        ret, frame = cap.read()

        cv2.imshow("original", frame)

        # 命名用于掩码边界的变量
        # j = cv2.getTrackbarPos('HSV','frame')

        # 将BGR转换为HSV
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

        # d限定在HSV红色的范围
        red_lower = np.array([red_val - 10, 100, 100])
        red_upper = np.array([red_val + 10, 255, 255])

        # 限定在HSV绿色的范围
        green_lower = np.array([green_val - 10, 100, 100])
        green_upper = np.array([green_val + 10, 255, 255])

        # T阈值HSV图像以仅获得所选颜色
        red_mask = cv2.inRange(hsv, red_lower, red_upper)
        green_mask = cv2.inRange(hsv, green_lower, green_upper)

        # Bitwise-AND屏蔽原始图像
        red_res = cv2.bitwise_and(frame, frame, mask=red_mask)
        green_res = cv2.bitwise_and(frame, frame, mask=green_mask)

        # 结构元素
        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))

        # 形态学结束
        red_closing = cv2.morphologyEx(red_res, cv2.MORPH_CLOSE, kernel)
        green_closing = cv2.morphologyEx(green_res, cv2.MORPH_CLOSE, kernel)

        # 转换为黑白图像
        red_gray = cv2.cvtColor(red_closing, cv2.COLOR_BGR2GRAY)
        green_gray = cv2.cvtColor(green_closing, cv2.COLOR_BGR2GRAY)
        (thresh1, red_bw) = cv2.threshold(red_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
        (thresh2, green_bw) = cv2.threshold(green_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

        # 计算像素变化
        red_black = cv2.countNonZero(red_bw)
        if red_black > 20000:
            print("RED")

        green_black = cv2.countNonZero(green_bw)
        if green_black > 18000:
            print("BLUE")

        # 显示结果帧
        both = np.hstack((red_bw, green_bw))
        cv2.imshow('RED_GREEN', both)

        # 按q退出
        if cv2.waitKey(3) & 0xFF == ord('q'):
            break

    # 完成所有操作后,释放捕获
    cap.release()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    main()

参考了原创

https://github.com/techbd123/MonochromicLightDetection/blob/master/traffic_light_detection.py#L44

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值