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()
相关推荐
hllqkbb几秒前
人体姿态估计-动手学计算机视觉14
人工智能·opencv·计算机视觉·分类
XiongLiding8 分钟前
我的第一个MCP,以及开发过程中的经验感悟
人工智能
三花AI22 分钟前
阿里 20B 参数 Qwen-Image-Edit 全能图像编辑模型
人工智能
EthanLifeGreat34 分钟前
ParallelWaveGAN-KaldiFree:纯Pytorch的PWG
人工智能·pytorch·深度学习·音频·语音识别
盏灯42 分钟前
据说,80%的人都搞不懂MCP底层?
人工智能·aigc·mcp
机器之心42 分钟前
机器人也会「摸鱼」了?宇树G1赛后葛优瘫刷美女视频,网友:比人还懂享受生活
人工智能·openai
胡耀超43 分钟前
从哲学(业务)视角看待数据挖掘:从认知到实践的螺旋上升
人工智能·python·数据挖掘·大模型·特征工程·crisp-dm螺旋认知·批判性思维
新智元1 小时前
Meta没做的,英伟达做了!全新架构吞吐量狂飙6倍,20万亿Token训练
人工智能·openai
新智元1 小时前
Hinton 预言成真!AI 接管美国一半白领,牛津哈佛扎堆转行做技工
人工智能·openai
aneasystone本尊1 小时前
学习 Coze Studio 的知识库入库逻辑
人工智能