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()
相关推荐
知识燃料8 分钟前
企业级生成式 AI 云平台推荐,哪些平台更适合从 Agent 原型走向生产?
大数据·人工智能
oioihoii11 分钟前
我用 Seed Evolving 做了个 AI 小说写作工具
人工智能
龙虾PRO14 分钟前
破解变异 OLLVM 混淆新思路:基于 Angr 动态执行自动化还原控制流完整实操方案
人工智能
@Mr_LiuYang15 分钟前
《深入理解 AI Agent:设计原理与工程实践 》实验1-1上下文的关键作用
人工智能
大模型丫丫19 分钟前
MCP协议开发实战:从零搭建AI Agent工具链
人工智能
wangxin20820 分钟前
大模型稀疏注意力和MoE的宽度丢失与多智能体的维度补充
人工智能·ai·多智能体·管理学·组织管理·coordclaw·稀释注意力
ZEB110620 分钟前
深耕矿山智能赛道 长沙迪迈科技以持续技术创新赋能矿业高质量转型
人工智能·科技·制造
一碗白开水一21 分钟前
入门实践工程四:基于 PyTorch 的手写数字识别(MNIST 图像分类)|附:环境依赖环境及工程源码
人工智能·pytorch·分类
A153625526 分钟前
2026 电商物流系统推荐:多渠道仓配履约数字化选型指南
大数据·数据库·人工智能
SEO_juper36 分钟前
2026年Schema自动注入实战:用Python批量给1000个页面加上JSON-LD,AI引用率实测提升38%
人工智能·python·json·seo·独立站