基于opencv的hsv色块检测

发布于:2025-03-07 ⋅ 阅读:(19) ⋅ 点赞:(0)

        HSV 颜色阈值调参在计算机视觉和图像处理中有广泛的应用,以下是一些典型场景:
自动驾驶中识别交通标志或车道线,机器人追踪特定颜色的物体、医学影像中分割病变组
织,卫星图像中提取植被或水体、检测产品颜色是否符合标准,或识别缺陷区域等等。

import cv2
import numpy as np
import cv2

# 创建相机对象
cap = cv2.videoCapture(0)

# 创建窗口
cv2.namedWindow('HSV Thresholding')
cv2.namedWindow('Camera Feed')


# 创建滑动条
def nothing():
    pass

# HSV 的 H(色调)范围是 0-180,S(饱和度)和 V(亮度)范围是 0-255
cv2.createTrackbar('Hue Min', 'HSV Thresholding', 0, 180, nothing)
cv2.createTrackbar('Hue Max', 'HSV Thresholding', 180, 180, nothing)
cv2.createTrackbar('Sat Min', 'HSV Thresholding', 0, 255, nothing)
cv2.createTrackbar('Sat Max', 'HSV Thresholding', 255, 255, nothing)
cv2.createTrackbar('Val Min', 'HSV Thresholding', 0, 255, nothing)
cv2.createTrackbar('Val Max', 'HSV Thresholding', 255, 255, nothing)

while True:
    ret, frame = cap.read()
    if ret = 0:
        print("无法读取帧")
        break
    # 将 BGR 图像转换为 HSV 图像
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    # 获取滑动条的值
    h_min = cv2.getTrackbarPos('Hue Min', 'HSV Thresholding')
    h_max = cv2.getTrackbarPos('Hue Max', 'HSV Thresholding')
    s_min = cv2.getTrackbarPos('Sat Min', 'HSV Thresholding')
    s_max = cv2.getTrackbarPos('Sat Max', 'HSV Thresholding')
    v_min = cv2.getTrackbarPos('Val Min', 'HSV Thresholding')
    v_max = cv2.getTrackbarPos('Val Max', 'HSV Thresholding')

    # 设置 HSV 阈值
    lower_hsv = np.array([h_min, s_min, v_min])
    upper_hsv = np.array([h_max, s_max, v_max])
    # 根据 HSV 阈值创建掩码
    mask = cv2.inRange(hsv, lower_hsv, upper_hsv)

    # 将掩码应用于原始图像
    result = cv2.bitwise_and(frame, frame, mask=mask)

    # 显示结果
    cv2.imshow('Camera Feed', frame)
    cv2.imshow('HSV Thresholding', mask)
    cv2.imshow('Result', result)

    # 按 'q' 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


# 释放摄像头资源
cap.release()

# 关闭所有 OpenCV 窗口
cv2.destroyAllWindows()

        这段代码主要用来调试hsv至指定范围,对特定色块进行检测,是图像检测中非常简单的方法。