python制作拾色器!鼠标点击即可获取当前位置的颜色!(代码片段)

程序员大咖 程序员大咖     2023-01-09     560

关键词:

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨朱小五

来源丨快学Python

大家好,我是小五🧐

我们做可视化经常会遇到配色问题,如果是在PPT中,只需使用颜色填充的取色器功能,就可以获取指定点的颜色,为自己作品增香添色。

上篇文章说到,我用Python也实现了一个类似的拾色器,今天就来讲一讲具体是怎么做到的!

如上图所示,运行时只需鼠标点击,就可以获取当前图片位置的颜色。

颜色值转换

opencv读取图片的默认像素排列是BGR,具体为什么这么设计,这里就不展开了,感兴趣的小伙伴可以参考这篇文章:https://learnopencv.com/why-does-opencv-use-bgr-color-format/

而实际上最常见的是RGB颜色,也是Photoshop中默认使用的颜色,也是最常用的一种颜色模式。RGB模式的图像由3个颜色通道组成,分别为红色通道(Red)、绿色通道(Green)和蓝色通道(Blue),这三个通道组合可以产生1670万余种不同的颜色。

我们其实可以使用opencv自带函数,转换图像的R通道和B通道。

cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

另外,还有一些小伙伴更熟悉十六进制颜色码。

在搜索引擎中,可以轻松找到颜色值在线转换网址。在Python中,则需要根据规则自定义个转换函数。

def rgb2hex(RGB):
    text = '#' + ''.join([hex(i)[-2:].replace('x', '0') for i in list(map(int, RGB))])
    return text

这样就再也不怕颜色值转换了。

鼠标交互获取颜色

回到本文最开始,一个拾色器最核心的就是鼠标交互功能。

# 定义鼠标交互函数

def get_Color(event, x, y, flags, param):
    if event == cv2.EVENT_LBUTTONDOWN:
        points = rgb2hex(img[y, x])
        print(points)
        cv2.circle(img, (x, y), 3, (255, 255, 255), thickness=2)
        cv2.putText(img, points, (x, y), cv2.FONT_HERSHEY_PLAIN, 2, (0, 0, 0), thickness=2)
        cv2.imshow("image", img)

cv2.namedWindow("image")
cv2.setMouseCallback("image", get_Color)
cv2.imshow("image", img)
cv2.waitKey(0)

上述代码中的opencv函数都比较好理解,简单解释一下其中的参数吧。

cv2.circle()中的几个参数分别为:图片,圆心,半径,颜色,线条的粗细。

cv2.putText()中的几个参数分别为:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细。

运行效果:

最后再验证一下,提取到的颜色是否正确?

可以拿一张带有颜色码的图片,运行我们的程序试试。

验证成功,测试得到的十六进制颜色码与正确答案一致!

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Android 拾色器透明问题

】Android拾色器透明问题【英文标题】:AndroidColorPickerTransparentIssue【发布时间】:2015-11-1808:07:59【问题描述】:我正在尝试在便笺中从拾色器中添加颜色,效果很好。但是如果没有从拾色器中选择颜色,它会直接将透明颜色应用... 查看详情

el-step修改颜色不成功

...,以下为操作方法:1、输入文字并且选中文字后,点击拾色器;2、打开拾色器,点击中间竖排的颜色;3、再点击左侧的颜色,即可修改颜色。参考技术A在ElStep中修改颜色不成功可能是由于安装的插件版本不正确造成的。建议... 查看详情

python使用笔记:pyautogui自动化控制鼠标和键盘(代码片段)

标题安装获取当前屏幕分辨率pyautogui鼠标操作获取/移动鼠标位置鼠标点击鼠标拖拽移动后按下/松开滚轮pyautogui键盘操作提示信息alert弹窗option选择框password密码输入框prompt数据输入框屏幕截图并保存屏幕查找图片位置并获取中间... 查看详情

优动漫paint基础系列之拾色器教学

在优动漫PAINT中有类似Photoshop的拾色器功能么?在优动漫PAINT中,可以直接输入颜色数值选择颜色么?当然是可以的啦!怎么呼出拾色器界面~看这边...前段时间小编有收到一些小伙伴的疑问,“在优动漫PAINT中有类似Photoshop中的... 查看详情

swiftswift-拾色器(代码片段)

查看详情

shader+ugui仿制unity拾色器(代码片段)

Shader+UGUI仿制Unity拾色器先上视频使用Shader+UGUI仿制Unity环形拾色器由于视频有点小,下面放个大图原理介绍Shader着色组件共使用了3个自定义Shader,对应了拾色器的不同组成部分,分别是:选色调的色环Shader... 查看详情

如何在 C++/OpenGL 中获取当前鼠标位置?

】如何在C++/OpenGL中获取当前鼠标位置?【英文标题】:HowdoIgetthecurrentmousepositioninC++/OpenGL?【发布时间】:2009-02-1121:09:51【问题描述】:我知道我可以在用户点击鼠标时使用鼠标回调函数,但是如果我想知道当前x/y位置而不需要... 查看详情

openlayers怎么获取当前鼠标点击位置的经纬度,openlayers自带地

楼主,我用c语言c语言绘制鼠标般步骤寄存器断,鼠标位置2.改位置画鼠标3.继处理4.重复面步骤,画鼠标式,3种同(我知道)直接画线(参考文献)2.存储保存(参考文献)(我用练手,所没优化,觉卡)(面draw_mouse模块专门画鼠标,属于存储保存)3.... 查看详情

js获取鼠标当前的位置

  有时候,我们需要得到窗口拖动或者鼠标移动的距离,此时可以通过计算鼠标前后在页面中的位置来得到想要的结果,下面介绍几个事件属性:1、客户区坐标位置  鼠标事件都是在浏览器视口中的特定位置上发生的。这个... 查看详情

php拾色器代码-oceanwp(代码片段)

查看详情

php拾色器代码-generatepress(代码片段)

查看详情

php拾色器代码-astra(代码片段)

查看详情

unityugui获取鼠标在屏幕的准确点击位置

想要获取鼠标在屏幕的准确点击位置,千万不要胡乱写,什么转化坐标系,什么Ray射线检测都是浮云。1,转化坐标系只是相对而言,并不能准确实现当前鼠标点击在屏幕的位置;2,Ray检测,hit是需要碰撞的,没碰撞,获取的是... 查看详情

delphi如何获取鼠标当前位置颜色

delphi如何获取鼠标当前位置颜色使用这个函数,COLORREFGetPixel(HDChdc,//handletoDCintnXPos,//x-coordinateofpixelintnYPos//y-coordinateofpixel);可以调用之前调用GerCursorPos来获取鼠标在屏幕上的位置,如果仅仅是为了取色的话,桌面窗口的HDC的获取... 查看详情

如何在 Mac OS 的拾色器上实现放大镜玻璃?

】如何在MacOS的拾色器上实现放大镜玻璃?【英文标题】:HowtoimplementthemagnifierglassoncolorpickerofMacOS?【发布时间】:2013-03-2102:37:57【问题描述】:是左上角的放大镜:我尝试了两种方法,但都失败了。单击放大镜后,创建一个新光... 查看详情

用百度地图api,怎么获取当前我的位置

...百度地图的右上角,点击“地图API”。在地图API页面,把鼠标移动到“工具”菜单项,在下拉菜单中选择“坐标拾取工具”。比如在搜索栏输入“百度大厦”点击搜索,就会在地图上出现相应的标记,点击你要找的某一个,就能... 查看详情

获取当前鼠标的位置以及组件的位置

   总结:  div如果要触发鼠标事件要加上css样式cusor:pointer。  查看详情

三维坐标系下,python如何获取鼠标点击事件,返回三维坐标x,y,z?

...gure中所显示的x,y,z坐标,使用什么api能返回这个结果呢?Python有一个内置的库matplotlib,它提供了图形界面(GUI)的功能,允许用户直接在图形上点击并获取鼠标位置。下面是一个简单的例子,展示了如何使用matplotlib库获取鼠标... 查看详情