python 图像处理之使用鼠标点击图像某点 获取该点的BGR值或者HSV值或者灰度值 cv2.setMouseCallback()

前言
获取图像某点及其领域的BGR值或者HSV值或者灰度值,是图像处理和计算机视觉中的常见需求

以下是常见的需要获取BGR值或者HSV值或者灰度值的场景:

  • 图像分割:在图像分割中,我们通常需要选择特定像素作为分割标记。获取该像素及其周围像素的值可以帮助我们确定最佳标记位置。
  • 物体检测:在物体检测中,我们通常需要检测特定颜色或强度的像素。获取像素颜色或灰度值可以帮助我们快速确定是否存在目标像素。
  • 图像分析:在图像分析中,我们通常需要统计某个区域内像素的数量或平均值。获取像素颜色或灰度值可以帮助我们准确计算这些统计数据。

再具体一点可以是:

  1. 初始化掩膜:在使用cv2.inRange()函数创建掩膜时,我们通常需要提供物体的颜色范围。获取物体中心像素的BGR或HSV值可以帮助我们确定物体颜色的范围,并创建适当的掩膜。
  2. 提取前景:在使用cv2.findContours()函数提取物体轮廓时,我们通常需要将图像转换为灰度图像,并使用cv2.threshold()函数将图像阈值化。获取像素的灰度值可以帮助我们确定阈值的合适值,以便正确地提取前景。
  3. 物体跟踪:在物体跟踪中,我们通常需要确定物体的颜色范围。获取物体中心像素的BGR或HSV值可以帮助我们确定物体颜色的范围,并跟踪物体的运动。

鼠标回调函数

OpenCV中提供了函数setMouseCallback()实现点击鼠标获取想要的目标值,其函数原型如下:

cv2.setMouseCallback(windowName, onMouse, param=None)

-windowName 窗口名称
-onMouse 鼠标事件的回调函数
-param 传递给回调函数的可选参数

当用户在窗口中进行鼠标事件时,回调函数会被调用,并且会传回相应的参数,比如鼠标事件类型、鼠标位置等。

通过设置不同的鼠标事件类型,可以实现诸如图像标注、交互式图像处理等功能。常见的鼠标事件类型包括:鼠标单击、鼠标双击、鼠标移动、鼠标拖拽等。

‘EVENT_FLAG_ALTKEY’ 表示按下 ALT 键.
‘EVENT_FLAG_CTRLKEY’ 表示按下 CTRL 键.
‘EVENT_FLAG_SHIFTKEY’ 表示按下 SHIFT 键.
‘EVENT_FLAG_LBUTTON’ 表示鼠标左键已按下.
‘EVENT_FLAG_MBUTTON’ 表示鼠标中键已按下.
‘EVENT_FLAG_RBUTTON’ 表示鼠标右键已按下.

示例

import cv2

#鼠标点击响应事件
def get_bgr_value(event,x,y,flags,param):
    if event==cv2.EVENT_LBUTTONDOWN:
        print("Bgr value is",img[y,x])

def get_gray_value(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        gray_value = gray[y, x]
        print("Gray value is", gray_value)

def get_hsv_value(event,x,y,flags,param):
    if event==cv2.EVENT_LBUTTONDOWN:
        print("HSV value is",HSV[y,x])

def get_various_value(event,x,y,flags,param):
    if event==cv2.EVENT_LBUTTONDOWN:
        print("Bgr value is", img[y, x])
        print("Gray value is", gray[y, x])
        print("HSV value is",HSV[y,x])

# 直接读为灰度图像
img = cv2.imread('D:/data_val/phone_1_dai/img/9.jpg')

# 将图像缩放到scale x scale
height, width = img.shape[:2]
if height > width:
    scale = 800 / height
else:
    scale = 800 / width
img = cv2.resize(img, None, fx=scale, fy=scale)

#BGR转化为gray、HSV
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
HSV=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)


cv2.imshow('image_BGR',img)
#cv2.imshow('image_GRAY',gray)
#cv2.imshow("image_HSV",HSV)
# cv2.setMouseCallback("image_BGR",get_bgr_value)
# cv2.setMouseCallback("image_GRAY",get_gray_value)
# cv2.setMouseCallback("image_HSV",get_hsv_value)
cv2.setMouseCallback("image_BGR",get_various_value)
cv2.waitKey(0)

效果如图所示:
在这里用opencv女神Lenna作为示例,点击图像的任意一处,其对应的RGB、HSV、灰度 值便显示出来在这里插入图片描述
欢迎大家点赞或收藏
大家的点赞或收藏可以鼓励作者加快更新哟~

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值