opencv颜色识别,hsv采用滑块调节

识别效果如图所示,尽量排除了蓝色背景的干扰,hsv可用滑块进行调节,更加方便

python 复制代码
import cv2
import numpy as np

# 创建一个命名窗口,用于显示滑块
cv2.namedWindow("TrackBar")

def nothing(x):
    pass

# 创建滑块控件
cv2.createTrackbar("Hue Min", "TrackBar", 0, 179, nothing)
cv2.createTrackbar("Hue Max", "TrackBar", 179, 179, nothing)
cv2.createTrackbar("Sat Min", "TrackBar", 99, 255, nothing)
cv2.createTrackbar("Sat Max", "TrackBar", 255, 255, nothing)
cv2.createTrackbar("Val Min", "TrackBar", 114, 255, nothing)
cv2.createTrackbar("Val Max", "TrackBar", 255, 255, nothing)

# 初始化滑块值
cv2.setTrackbarPos("Hue Min", "TrackBar", 0)
cv2.setTrackbarPos("Hue Max", "TrackBar", 88)
cv2.setTrackbarPos("Sat Min", "TrackBar", 147)
cv2.setTrackbarPos("Sat Max", "TrackBar", 255)
cv2.setTrackbarPos("Val Min", "TrackBar", 114)
cv2.setTrackbarPos("Val Max", "TrackBar", 255)

# 打开摄像头
cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("Error: Could not open camera.")
    exit()

while True:
    # 读取一帧视频
    ret, frame = cap.read()
    if not ret:
        print("Error: Could not read frame.")
        break

    # 转换图像颜色空间为HSV
    imgHSV = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

    # 获取滑块的当前值
    hueLow = cv2.getTrackbarPos("Hue Min", "TrackBar")
    hueHigh = cv2.getTrackbarPos("Hue Max", "TrackBar")
    satLow = cv2.getTrackbarPos("Sat Min", "TrackBar")
    satHigh = cv2.getTrackbarPos("Sat Max", "TrackBar")
    valLow = cv2.getTrackbarPos("Val Min", "TrackBar")
    valHigh = cv2.getTrackbarPos("Val Max", "TrackBar")

    # 创建掩膜
    lower_red = np.array([hueLow, satLow, valLow])
    upper_red = np.array([hueHigh, satHigh, valHigh])
    mask = cv2.inRange(imgHSV, lower_red, upper_red)

    # 应用中值模糊来减少噪声
    mask = cv2.medianBlur(mask, 7)

    # 使用掩膜提取图像的特定部分
    imageResult = cv2.bitwise_and(frame, frame, mask=mask)

    # 查找轮廓
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 查找最大轮廓
    max_contour = None
    max_area = 0
    for contour in contours:
        area = cv2.contourArea(contour)
        if area > max_area:
            max_area = area
            max_contour = contour

    # 在原始图像上绘制矩形框
    if max_contour is not None and max_area > 500:  # 忽略小区域
        x, y, w, h = cv2.boundingRect(max_contour)
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # 显示原始图像和掩膜效果
    cv2.imshow('Original', frame)
    cv2.imshow('HSV', imgHSV)
    cv2.imshow('Mask Result', imageResult)

    # 按'q'键退出
    if cv2.waitKey(1) == ord('q'):
        break

# 释放摄像头并销毁所有窗口
cap.release()
cv2.destroyAllWindows()
相关推荐
m0_743106461 小时前
【论文笔记】MV-DUSt3R+:两秒重建一个3D场景
论文阅读·深度学习·计算机视觉·3d·几何学
m0_743106461 小时前
【论文笔记】TranSplat:深度refine的camera-required可泛化稀疏方法
论文阅读·深度学习·计算机视觉·3d·几何学
井底哇哇4 小时前
ChatGPT是强人工智能吗?
人工智能·chatgpt
Coovally AI模型快速验证4 小时前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
AI浩4 小时前
【面试总结】FFN(前馈神经网络)在Transformer模型中先升维再降维的原因
人工智能·深度学习·计算机视觉·transformer
可为测控5 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
一水鉴天5 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
开发语言·人工智能·python
倔强的石头1065 小时前
解锁辅助驾驶新境界:基于昇腾 AI 异构计算架构 CANN 的应用探秘
人工智能·架构
佛州小李哥6 小时前
Agent群舞,在亚马逊云科技搭建数字营销多代理(Multi-Agent)(下篇)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技
说私域6 小时前
社群裂变+2+1链动新纪元:S2B2C小程序如何重塑企业客户管理版图?
大数据·人工智能·小程序·开源