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()
相关推荐
Scc_hy9 分钟前
强化学习_Paper_1988_Learning to predict by the methods of temporal differences
人工智能·深度学习·算法
袁煦丞12 分钟前
【亲测】1.5万搞定DeepSeek满血版!本地部署避坑指南+内网穿透黑科技揭秘
人工智能·程序员·远程工作
大模型真好玩14 分钟前
理论+代码一文带你深入浅出MCP:人工智能大模型与外部世界交互的革命性突破
人工智能·python·mcp
遇码27 分钟前
大语言模型开发框架——LangChain
人工智能·语言模型·langchain·llm·大模型开发·智能体
在狂风暴雨中奔跑27 分钟前
使用AI开发Android界面
android·人工智能
阳光_你好28 分钟前
请详细说明opencv/c++对图片缩放
c++·opencv·计算机视觉
飞哥数智坊29 分钟前
AI编程实战:30分钟实现Web 3D船舶航行效果
人工智能·three.js
誉鏐32 分钟前
从零开始设计Transformer模型(1/2)——剥离RNN,保留Attention
人工智能·深度学习·transformer
Ai野生菌33 分钟前
工具介绍 | SafeLLMDeploy教程来了 保护本地LLM安全部署
网络·人工智能·安全·大模型·llm
契合qht53_shine39 分钟前
OpenCV 从入门到精通(day_05)
人工智能·opencv·计算机视觉