前言
获取图像某点及其领域的BGR值或者HSV值或者灰度值,是图像处理和计算机视觉中的常见需求
以下是常见的需要获取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、灰度 值便显示出来