【python交互界面】实现动态观察图像在给定HSV范围的区域显示

HSV颜色空间

与RGB颜色空间相比,HSV颜色空间更适合进行颜色分析和提取特定颜色的目标。在HSV空间中,颜色信息被分布在不同的通道上,使我们能够更准确地定义颜色的范围,并使用阈值操作轻松地分离出我们感兴趣的区域部分。

HSV三个通道的含义

  1. 色相(Hue) 表示颜色的类型或种类,而不受光照变化的影响。

  2. **饱和度(Saturation)**表示颜色的纯度或鲜艳程度。

  3. **明度(Value)**表示颜色的亮度。

在提取期望颜色区域时,参考博客给出的HSV颜色识别-HSV基本颜色分量范围-CSDN博客

滑动条交互界面的代码实现

python 复制代码
# 通过滑动条动态观察不同的HSV的阈值下图像可显示区域的变化过程

import cv2
import numpy as np

def on_trackbar_min_hue(value):
    global min_hue
    min_hue = value

def on_trackbar_max_hue(value):
    global max_hue
    max_hue = value

def on_trackbar_min_saturation(value):
    global min_saturation
    min_saturation = value

def on_trackbar_max_saturation(value):
    global max_saturation
    max_saturation = value

def on_trackbar_min_value(value):
    global min_value
    min_value = value

def on_trackbar_max_value(value):
    global max_value
    max_value = value

# 创建一个空窗口
cv2.namedWindow('Color Range Visualization')

# 创建滑动条并初始化HSV最小和最大值
min_hue, max_hue = 100, 130
min_saturation, max_saturation = 40, 255
min_value, max_value = 80, 255

# 创建滑动条
cv2.createTrackbar('Min Hue', 'Color Range Visualization', min_hue, 179, on_trackbar_min_hue)
cv2.createTrackbar('Max Hue', 'Color Range Visualization', max_hue, 179, on_trackbar_max_hue)
cv2.createTrackbar('Min Saturation', 'Color Range Visualization', min_saturation, 255, on_trackbar_min_saturation)
cv2.createTrackbar('Max Saturation', 'Color Range Visualization', max_saturation, 255, on_trackbar_max_saturation)
cv2.createTrackbar('Min Value', 'Color Range Visualization', min_value, 255, on_trackbar_min_value)
cv2.createTrackbar('Max Value', 'Color Range Visualization', max_value, 255, on_trackbar_max_value)

# 读取示例图像
image = cv2.imread("YOUR IMAGE PATH")
image = cv2.resize(image,(700,700))        # 图片过小的话,窗口容不下这些控件
print(image.shape)

while True:
    # 转换图像到HSV颜色空间
    hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

    # 创建一个包含最小和最大HSV值的NumPy数组
    lower_range = np.array([min_hue, min_saturation, min_value])
    upper_range = np.array([max_hue, max_saturation, max_value])

    # 根据HSV范围创建掩码
    mask = cv2.inRange(hsv_image, lower_range, upper_range)

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

    # 在显示窗口上实时显示滑动条的数值
    text1 = f"Min Hue: {min_hue}  Max Hue: {max_hue}"
    cv2.putText(result, text1, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)
    text2 = f"Min Saturation: {min_saturation}  Max Saturation: {max_saturation} "
    cv2.putText(result, text2, (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)
    text3 = f"Min Value: {min_value}  Max Value: {max_value}"
    cv2.putText(result, text3, (10, 110), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 255), 2, cv2.LINE_AA)

    # 显示结果图像
    cv2.imshow('Original Image', image)
    cv2.imshow('Color Range Visualization', result)

    # 按下Esc键退出
    if cv2.waitKey(1) == 27:
        break

# 释放窗口和销毁所有创建的窗口
cv2.destroyAllWindows()

运行结果示例

通过拉动上方的滑动条,不在滑动条对应的HSV范围内区域将被[0,0,0]的mask淹没,即可以实时可视化选定HSV范围内的区域

如下图所示,三张图片依次为:滑动条窗口,选定HSV范围内的区域可视化,输入的原图像

相关推荐
阡之尘埃1 小时前
Python数据分析案例61——信贷风控评分卡模型(A卡)(scorecardpy 全面解析)
人工智能·python·机器学习·数据分析·智能风控·信贷风控
SoraLuna2 小时前
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
macos·ui·harmonyos
丕羽4 小时前
【Pytorch】基本语法
人工智能·pytorch·python
ctrey_4 小时前
2024-11-1 学习人工智能的Day20 openCV(2)
人工智能·opencv·学习
bryant_meng5 小时前
【python】Distribution
开发语言·python·分布函数·常用分布
绕灵儿5 小时前
OpenCV通过指针裁剪图像
人工智能·opencv·计算机视觉
m0_594526306 小时前
Python批量合并多个PDF
java·python·pdf
工业互联网专业6 小时前
Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现
vue.js·hadoop·python·flask·毕业设计·源码·课程设计
钱钱钱端6 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
慕卿扬6 小时前
基于python的机器学习(二)—— 使用Scikit-learn库
笔记·python·学习·机器学习·scikit-learn