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()
相关推荐
阳光是sunny4 小时前
别再被 worktree 绕晕了!AI 编程时代你必须掌握的 Git 隔离神器
前端·人工智能·后端
冬奇Lab5 小时前
每日一个开源项目(第148篇):obsidian-skills - Obsidian CEO 亲写的 AI Agent 格式规范,让 Agent 不再破坏你的 Vault
人工智能·开源·资讯
ethantan5 小时前
AI Agent 组成:像人一样思考的智能体
人工智能·程序员·架构
冬奇Lab5 小时前
Workflow 系列(05):评测体系——三层测试结构与 Trace 追踪
人工智能·工作流引擎
ethantan6 小时前
一篇讲解AI Agent 组成:像人一样思考的智能体
人工智能·后端·程序员
Cosolar7 小时前
vLLM 生产级部署完全指南
人工智能·后端·架构
CodePlayer竟然被占用了8 小时前
被美国政府封杀18天,Claude Fable 5 回来了——但代价是什么?
人工智能
IT_陈寒8 小时前
垃圾回收器选错了,我的Java服务内存炸了
前端·人工智能·后端
smartpi9 小时前
SmartPi GPIO 脉冲与回复语执行时序指南
人工智能
阿里云大数据AI技术9 小时前
PAI支持一键部署GLM-5.2,Coding能力比肩Claude Opus 4.8
人工智能