extract more than one colored object, for example, extract red, blue, and green objects simultaneous

前言

题目地址:https://docs.opencv.org/4.x/df/d9d/tutorial_py_colorspaces.html
题目内容:
Try to find a way to extract more than one colored object, for example, extract red, blue, and green objects simultaneously.

Source Code

# 开发时间:2022/2/21  21:18
import cv2 as cv
import numpy as np

cap = cv.VideoCapture(0)

while True:
    # 读取帧
    _, 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)

    # 定义HSV中绿色的范围
    lower_green = np.array([35, 43, 46])
    upper_green = np.array([77, 255, 255])
    # 设置HSV的阈值只取绿色
    mask_G = cv.inRange(hsv, lower_green, upper_green)

    # 定于HSV中红色的范围
    lower_red1 = np.array([0, 43, 46])
    upper_red1 = np.array([20, 255, 255])
    # 设置HSV的阈值只取红色
    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]]	)
    # 调整OpenCV弹出窗口大小:参考博客https://blog.csdn.net/m0_37303351/article/details/78944904
    cv.namedWindow("frame", 0)
    cv.namedWindow("mask", 0)
    cv.namedWindow("res", 0)
    cv.imshow('frame', frame)
    cv.imshow('mask', mask)
    cv.imshow('res', res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

Result

result

总结

参考代码地址:
https://docs.opencv.org/4.x/df/d9d/tutorial_py_colorspaces.html
调整opencv弹出窗口的大小

猜你喜欢

转载自blog.csdn.net/booze_/article/details/123056471
今日推荐