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])

# 直接读为灰度图像
img = cv2.imread('C:/Users/Administrator/Desktop/examples/scratch/img_cutting/1.jpg')

# # 将图像缩放到scale x scale
# height, width = img.shape[:2]
# if height > width:
#     scale = 700 / height
# else:
#     scale = 700 / 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.waitKey(0)

效果如图所示:
在这里用opencv女神Lenna作为示例,分别点击每幅图像的同一处,其对应的RGB、HSV、灰度 值便显示出来在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44598554/article/details/130928657
今日推荐