图片指定坐标点的hsv
基于OpenCV的hsv获取
首先,需要在PyCharm中配置环境
opencv-python版本4.4.0, Python版本: 3.9
。配置完成后,直接上代码:
import cv2
import numpy as np
# 定义鼠标交互函数
def mouseColor(event, x, y, flags, param):
# CV_EVENT_LBUTTONDOWN =1, //按下左键
if event == cv2.EVENT_LBUTTONDOWN:
print('HSV:', hsv[y, x]) #输出图像坐标(x,y)处的HSV的值
if __name__ == "__main__":
img = cv2.imread('C:/Users/wenhaofu/Desktop/picture/on.png') #读进来是BGR格式
# C:/Users/wenhaofu/Desktop/picture/blue.png
# C:/Users/wenhaofu/Desktop/picture/on.png
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #变成HSV格式
cv2.namedWindow("Color Picker")
'''
winname:窗口的名字
onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。
这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param);
userdate:传给回调函数的参数
'''
cv2.setMouseCallback("Color Picker", mouseColor) #鼠标相应回调函数
cv2.imshow("Color Picker", img)
low_hsv = np.array([100, 43, 46])
high_hsv = np.array([124, 255, 255])
mask = cv2.inRange(hsv, lowerb=low_hsv, upperb=high_hsv)
cv2.imshow("test", mask)
if cv2.waitKey(0):
cv2.destroyAllWindows()
在图片上点击鼠标左键,即可获得该位置的hsv。将蓝色部分变为白色(视觉上的)。
调用函数
void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)
winname:窗口的名字
onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针。 这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param);
userdate:传给回调函数的参数
接下来介绍on_Mouse函数:
void on_Mouse(int event, int x, int y, int flags, void* param);
event是 CV_EVENT_*变量之一
x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系)
flags是CV_EVENT_FLAG的组合, param是用户定义的传递到setMouseCallback函数调用的参数。
这里是全部事件:
enum
{
CV_EVENT_MOUSEMOVE =0, //鼠标移动
CV_EVENT_LBUTTONDOWN =1, //按下左键
CV_EVENT_RBUTTONDOWN =2, //按下右键
CV_EVENT_MBUTTONDOWN =3, //按下中键
CV_EVENT_LBUTTONUP =4, //放开左键
CV_EVENT_RBUTTONUP =5, //放开右键
CV_EVENT_MBUTTONUP =6, //放开中键
CV_EVENT_LBUTTONDBLCLK =7, //左键双击
CV_EVENT_RBUTTONDBLCLK =8, //右键双击
CV_EVENT_MBUTTONDBLCLK =9, //中键双击
CV_EVENT_MOUSEWHEEL =10, //滚轮滚动
CV_EVENT_MOUSEHWHEEL =11 //横向滚轮滚动(还好我鼠标是G502可以这么干)
};
enum
{
CV_EVENT_FLAG_LBUTTON =1, //左键拖拽
CV_EVENT_FLAG_RBUTTON =2, //右键拖拽
CV_EVENT_FLAG_MBUTTON =4, //中键拖拽
CV_EVENT_FLAG_CTRLKEY =8, //按住CTRL拖拽
CV_EVENT_FLAG_SHIFTKEY =16, //按住Shift拖拽
CV_EVENT_FLAG_ALTKEY =32 //按住ALT拖拽
};
hsv范围
注意到这里红色的hmin和hmax有两个值,但是我这里使用156和180时,并没有得到想要的结果。
结果如下图,可以发现正确识别了图中的红色部分。
版权声明:本文为FuWen_Hao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。