当前位置: 首页 > news >正文

鼠标点击来动态确定 HSV 范围

根据鼠标点击来动态确定 HSV 范围,可以先获取用户点击的像素值,然后使用这个值生成合适的 HSV 范围。这样,我们可以提取图像中的特定颜色(比如蓝色框)

代码步骤:

  • 获取鼠标点击的颜色值:用户点击图像后,从该点提取 HSV 值。

  • 定义 HSV 范围:以点击的 HSV 值为中心,设置一定的上下限范围。

  • 基于 HSV 范围提取颜色:使用提取的 HSV 范围进行颜色分割,并提取相应的框。

     import cv2import numpy as np# 全局变量hsv_clicked = Nonedef mouse_callback(event, x, y, flags, param):global hsv_clickedif event == cv2.EVENT_LBUTTONDOWN:  # 当检测到左键点击时# 获取点击处的BGR像素值pixel = img[y, x]print(f"Clicked BGR value: {pixel}")# 将BGR值转换为HSVhsv_pixel = cv2.cvtColor(np.uint8([[pixel]]), cv2.COLOR_BGR2HSV)hsv_clicked = hsv_pixel[0][0]print(f"Clicked HSV value: {hsv_clicked}")# 重新处理图像process_image_with_hsv_range(hsv_clicked)def process_image_with_hsv_range(hsv_value):# 设定点击颜色的HSV范围 (可根据需要调整)lower_hsv = np.array([hsv_value[0] - 10, max(50, hsv_value[1] - 50), max(50, hsv_value[2] - 50)])upper_hsv = np.array([hsv_value[0] + 10, min(255, hsv_value[1] + 50), min(255, hsv_value[2] + 50)])print(f"Lower HSV: {lower_hsv}")print(f"Upper HSV: {upper_hsv}")# 将图像转换为HSVhsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 基于点击的HSV范围生成掩码mask = cv2.inRange(hsv, lower_hsv, upper_hsv)# 使用掩码提取颜色result = cv2.bitwise_and(img, img, mask=mask)# 查找边缘gray = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)edges = cv2.Canny(gray, 50, 150)# 查找轮廓contours, hierarchy = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 绘制轮廓的矩形框for contour in contours:area = cv2.contourArea(contour)if area > 500:  # 过滤小的轮廓x, y, w, h = cv2.boundingRect(contour)cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示结果cv2.imshow("Processed Image", img)# 加载图像image_path = "/mnt/data/blue.png"img = cv2.imread(image_path)# 显示图像并设置鼠标回调函数cv2.imshow('Image', img)cv2.setMouseCallback('Image', mouse_callback)# 等待用户操作cv2.waitKey(0)cv2.destroyAllWindows()
    

代码说明:

  1. 鼠标点击获取颜色值:

当用户点击图像时,通过鼠标回调函数 mouse_callback() 获取点击位置的 BGR 值,然后将其转换为 HSV。
打印出的 BGR 和 HSV 值是用于调试的。

  1. 设定 HSV 范围:

使用点击的 HSV 值来生成上下限范围,稍微扩展一下上下限(+/- 10)来包含颜色的近似值。
上下限中的色相范围是 ±10,而饱和度和亮度可以根据情况调整。

  1. 图像处理:

通过 cv2.inRange() 函数使用生成的 HSV 范围来创建掩码,接着用掩码提取出该颜色的部分。
之后,通过 cv2.findContours() 查找轮廓,并在原图上绘制矩形框标出提取到的区域。

使用步骤:

  • 运行程序,图像窗口会弹出。
  • 在弹出的图像窗口中点击你希望提取的蓝色框的某一点。 程序将提取点击位置的 HSV 值,使用这个 HSV 值来提取图像中所有符合这个颜色范围的区域。 你可以根据需要调整 HSV 范围,以提取不同的颜色范围。

http://www.mrgr.cn/news/23358.html

相关文章:

  • window关闭端口程序
  • AbyssFish单连通周期边界多孔结构2D软件 V2.0版本更新
  • [晕事]今天做了件晕事43 python-byte串长度与转义字符
  • 戏曲文化苑管理系统小程序的设计
  • 问:Java中HashMap和Hashtable区别,知多少?
  • linux-用户与权限管理-组管理
  • 分享一款520表白节JS代码
  • JavaScript 比较 和 逻辑运算符
  • 我的搬砖工具由 VS Code 变成 Cursor 了
  • 建模实战|第八期:Benders Decomposition求解设施选址问题(FLP):理论及python代码实战
  • php代码实例强制下载文件代码例子
  • 算法类学习笔记 ———— 障碍物检测
  • 一个例子彻底搞懂对线程模型的理解 !
  • 教你一键总结B站视频
  • RAG+Agent在实际业务落地案例分享+项目推荐
  • Go语言现代web开发05 指针和结构体
  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于负荷碳排放特征的配电网源荷协同规划方法》
  • 曾经的王者-腾讯公众号为什么不火了呢?
  • python:实现greatest common divisor最大公约数算法
  • Telephony STK 域选