面对一张色彩绚丽的图片,你很像知道某一块的颜色是什么,这包括色彩的名字和这一点上色彩的RGB值,但在缺少专业工具的情况下,这似乎是一个难以完成的任务,但python可以为我们提供这样的功能,解决pandas, cv2库,我们可以实现这样的功能,最终的效果如下图所示

鼠标双击在红色区域,图片上方则显示出这个区域的颜色信息。那么,该如何实现这样有趣的功能呢?通过本文,你将会学习到cv2库的一般使用方法,例如显示图片,处理鼠标双击事件,在图片上添加文字。

1. 安装必要的python库

pip install opencv-python numpy pandas

opencv是一个强大的图像处理和计算机视觉库, pandas是一种基于numpy的工具,在数据分析方面非常受欢迎,实现图片颜色检测的功能,必须用到这三个库

2. 通过点击获得像素信息

程序需要将图片显示出来,鼠标双击后,程序获得鼠标点击的位置,通过这个位置,获取这个点的像素色彩信息,也就是RGB值。

import cv2

img = cv2.imread('colorpic.jpg')

def click_info(event, x, y, flags, param):

# 只处理双击事件

if event == cv2.EVENT_LBUTTONDBLCLK:

print('坐标', x, y)

b, g, r = img[y, x] # 获取b, g, r

print("像素点的bgr值", b, g, r)

cv2.namedWindow('image')

cv2.setMouseCallback('image', click_info)

while True:

cv2.imshow("image", img)

# 点击 esc键

if cv2.waitKey(20) & 0xFF ==27:

break

cv2.destroyAllWindows()

执行程序,双击图片上的某一点,就可以获得鼠标所点击区域的x,y值

3. 在图片上显示文字

为了在图片上显示文字,先使用rectangle方法绘制出一个矩形区域,需要指定矩形的左上角和右下角的x,y 值,并指定色彩,下面的示例中,色彩我选择了(0, 0, 0) 黑色。putText方法用于显示文字,指定文字开始的x, y坐标

import cv2

img = cv2.imread('colorpic.jpg')

cv2.rectangle(img, (20, 20), (750, 60), (0,0,0), -1)

cv2.putText(img, 'this is a picture', (50,50), 2, 0.8, (255,255,255), 2, cv2.LINE_AA)

while True:

cv2.imshow("image", img)

# 点击 esc键

if cv2.waitKey(20) & 0xFF ==27:

break

cv2.destroyAllWindows()

4. 根据RGB值计算色彩名称

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。前面已经讲解如何获得像素点的RGB, 那么如何通过这三个值判断它属于哪种颜色呢?

首先,需要一份颜色信息表,记录色彩的名称和RGB值,这些信息记录在一份csv文件中,格式如下

air_force_blue_raf,"Air Force Blue (Raf)",#5d8aa8,93,138,168

air_force_blue_usaf,"Air Force Blue (Usaf)",#00308f,0,48,143

air_superiority_blue,"Air Superiority Blue",#72a0c1,114,160,193

第二列是色彩名称,后散列是RGB值,使用pandas将数据读取到dataframe中,获得一个像素点后,计算遍历dataframe中的所有数据,找到r, g, b差值最小的那一个就可以任务是该颜色

import pandas as pd

index = ["color", "color_name", "hex", "R", "G", "B"]

csv_df = pd.read_csv('colors.csv', names=index, header=None)

def get_color_name(r, g, b):

min_diff = 10000

color_name = ''

for i in range(len(csv_df)):

d = abs(r- int(csv_df.loc[i,"R"])) + abs(g- int(csv_df.loc[i,"G"]))+ abs(b- int(csv_df.loc[i,"B"]))

if d <= min_diff:

min_diff = d

color_name = csv_df.loc[i,"color_name"]

return color_name

函数get_color_name根据r, g, b的值来确定色彩名称

5.全部代码

import pandas as pd

import cv2

def get_color_name(r, g, b):

min_diff = 10000

color_name = ''

for i in range(len(csv_df)):

d = abs(r - int(csv_df.loc[i, "R"])) + abs(g - int(csv_df.loc[i, "G"]))+ abs(b - int(csv_df.loc[i, "B"]))

if d <= min_diff:

min_diff = d

color_name = csv_df.loc[i,"color_name"]

return color_name

def click_info(event, x, y, flags, param):

# 只处理双击事件

if event == cv2.EVENT_LBUTTONDBLCLK:

global b,g,r,xpos,ypos, clicked

xpos = x

ypos = y

b, g, r = img[y, x] # 获取b, g, r

b = int(b)

g = int(g)

r = int(r)

clicked = True

r = g = b = xpos = ypos = 0

clicked = False

img = cv2.imread('colorpic.jpg')

index = ["color", "color_name", "hex", "R", "G", "B"]

csv_df = pd.read_csv('colors.csv', names=index, header=None)

cv2.namedWindow('image')

cv2.setMouseCallback('image', click_info)

while True:

cv2.imshow("image", img)

if clicked:

# 绘制显示文字的区域

cv2.rectangle(img, (20, 20), (750, 60), (b, g, r), -1)

text = get_color_name(r, g, b) + ' R='+ str(r) + ' G='+ str(g) + ' B='+ str(b)

# 显示文字内容

cv2.putText(img, text, (50, 50), 2, 0.8, (255, 255, 255), 2, cv2.LINE_AA)

# 如果像素点的颜色太偏向于白色,就用黑色来显示文字

if(r + g + b >= 600):

cv2.putText(img, text, (50, 50), 2, 0.8, (0, 0, 0), 2, cv2.LINE_AA)

clicked=False

# 点击 esc键

if cv2.waitKey(20) & 0xFF ==27:

break

cv2.destroyAllWindows()

python颜色识别_python颜色识别相关推荐

  1. python相似图片识别_Python+Opencv识别两张相似图片

    Python+Opencv识别两张相似图片 在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话 ...

  2. python编写图像识别_python实现识别相似图片小结

    文章简介 在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能 ...

  3. python图像检测_Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  4. python图形验证码识别_Python验证码识别:利用pytesser识别简单图形验证码

    一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行 ...

  5. python随机颜色数字_python颜色随机生成器的实例代码

    1. 代码: def random_color(number=number): color = [] intnum = [str(x) for x in np.arange(10)] #Out[138 ...

  6. python polygon函数_Python 人脸识别就多简单,看这个就够了!

    点击上方"Python编程与实战",选择"置顶公众号" 第一时间获取 Python 技术干货! 阅读文本大概需要 11分钟. 今天给大家介绍一个世界上最简洁的人 ...

  7. python图片内容长度识别_Python实现识别图片内容的方法分析

    本文实例讲述了Python实现识别图片内容的方法.分享给大家供大家参考,具体如下: python识别图片内容. 这里我的环境为windows64位,python2.7.14 需要用到PIL模块和tes ...

  8. python实现人脸识别_python人脸识别代码实现丨内附代码

    Python在人脸识别方面功能很强大,程序语言简单高效,下面小编来编程实现一下如何实现人脸识别.如有错点,还望斧正 识别图片中的人脸位置 #人脸识别分类器路径tool_url = r'C:\Users ...

  9. python爬虫验证码的识别_Python爬虫识别验证码

    Python爬虫识别验证码 安装tesserocr pip3 install tesserocr pillow 识别测试 将验证码图片放到项目根目录下,用tesserocr库识别该验证码,代码如下所示 ...

  10. python语音验证码识别_Python验证码识别

    大致介绍 在python爬虫爬取某些网站的验证码的时候可能会遇到验证码识别的问题,现在的验证码大多分为四类: 1.计算验证码 2.滑块验证码 3.识图验证码 4.语音验证码 这篇博客主要写的就是识图验 ...

最新文章

  1. 在CentOS 6.9 x86_64的nginx 1.12.2上开启echo-nginx-module模块实录
  2. iOS scrollToItemAtIndexPath 无效的解决方案
  3. 会话管理之session技术
  4. 【Session】Tomcat中Session持久化到文件系统或数据库
  5. html的!DOCTYPE标签初窥
  6. 如意报表插件如何安装_Google Chrome浏览器如何安装插件应用
  7. 草稿 listview动态绑定数据
  8. VC2008下使用OpenSSL 1 0 0g 免编译
  9. 好快!京东推出全新快递服务: 最快30分钟送达
  10. 那些让程序员提升30-80%的快捷键大全整理
  11. JDE 系统表(标准表)
  12. 如何满足python安装需求升级win7到SP1版本
  13. 实习日记(4-28)
  14. 自然语言处理之语言模型(LM)
  15. windows开机启动项(​仅限Win10,Win7)​
  16. 像向日葵一样活着——想起了从幼稚园到现在的同桌们
  17. 2021-2022软件架构与设计趋势报告
  18. 复盘49个硬币资本投资项目,8大维度解析其投资逻辑与布局
  19. 【灯哥开源四足机器人】推荐一个开源四足机器狗项目,8自有度,两个舵机控制一个腿,apache开源协议的,已经迭代了好多个版本了,设计的非常好。有官方淘宝店,没有3D打印机的可以购买散装零件自己组装
  20. m420c节能证书下载_节字标志认证证书节能产品认证证书4.PDF

热门文章

  1. ffmpeg音视频编码入门:音频解码(acc/mp3 转 pcm)
  2. 《构建之法》参考书和链接汇总
  3. CSDN终于破2万粉了,几百块钱的课程可白嫖,就是宠粉!
  4. hmtl--textarea的滚动条(转)
  5. C# 访问 带密码的access数据库
  6. c语言程序设计辅导资料pdf,第一章 C语言程序设计辅导资料(修订版).pdf
  7. 锐捷客户端在linux下的校园网认证
  8. C语言求素数中flag的作用,c语言编程判断素数 c语言程序设计(判断素数)
  9. 【C语言】判断素数的函数
  10. 基于java+SpringBoot+HTML+Mysq幼儿园日常管理系统