[OpenCV练习题实现] 尝试找到一种方法来提取多个彩色对象,例如,同时提取红色,蓝色,绿色对象。

126 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.背景

阅读官方文档/手册,学习openCV的过程中遇到的练习题,记录一下。

练习题

  1. 尝试找到一种方法来提取多个彩色对象,例如,同时提取红色,蓝色,绿色对象。

2. 代码部分

import cv2 as cv
import numpy as np

cap = cv.VideoCapture(0)

while (1):
    # 读取帧
    _, frame = cap.read()
    # 转换颜色空间 BGR 到 HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # 定义HSV中蓝色的范围
    lower_blue = np.array([106, 43, 46])
    upper_blue = np.array([130, 255, 255])
    # 设置HSV的阈值使得只取蓝色
    mask_B = cv.inRange(hsv, lower_blue, upper_blue)

    lower_green = np.array([35, 43, 46])
    upper_green = np.array([77, 255, 255])
    mask_G = cv.inRange(hsv, lower_green, upper_green)

    lower_red1 = np.array([0, 43, 46])
    upper_red1 = np.array([20, 255, 255])
    mask_R1 = cv.inRange(hsv, lower_red1, upper_red1)

    lower_red2 = np.array([150, 43, 46])
    upper_red2 = np.array([180, 255, 255])
    mask_R2 = cv.inRange(hsv, lower_red2, upper_red2)

    mask=mask_B+mask_G+mask_R1+mask_R2
    #mask = mask_R1 + mask_R2

    #	dst	=	cv.inRange(	src, lowerb, upperb[, dst]	)

    # 将掩膜和图像逐像素相加
    res = cv.bitwise_and(frame, frame, mask=mask)
    # dst	=	cv.bitwise_and(	src1, src2[, dst[, mask]]	)

    cv.imshow('frame', frame)
    cv.imshow('mask', mask)
    cv.imshow('res', res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

3. 演示效果

用Ipad测试了一下,效果还不错,范围内噪音也比较少。

在这里插入图片描述 实现方法肯定不止一种,如果您有其他方法,欢迎留言交流~