基于Python的颜色识别器

重磅干货,第一时间送达

在这篇文章中,我们将展示如何使用Python构建颜色识别器。此过程也称为“颜色检测”。我们将创建一个基本应用程序,该应用程序将帮助我们检测图像中的颜色。该程序还将返回颜色的RGB值。构建颜色识别器是Computer Vision中最基础的项目。

如果大家以前从未听说过Computer Vision,那么这是了解它的最佳时间。大多数机器学习和人工智能领域都与计算机视觉紧密相关。随着我们的发展和探索,看到外部世界对我们的发展具有重大影响。对于机器来说,情况也是如此,他们使用图像看到外界,并且这些图像被转换为计算机可以理解的数据值。

目录

· 入门

· 库

· 定义图片

· 颜色识别

· 应用

· 结果

入门

我们将为此项目使用三个主要模块。它们是NumPy,Pandas和OpenCv。OpenCv是一个高度优化的库,专注于实时应用程序。

OpenCV(开源计算机视觉库)是一个开源计算机视觉和机器学习软件库。OpenCV的构建旨在为计算机视觉应用程序提供通用的基础结构,并加速在商业产品中使用机器感知。

资料来源:https : //opencv.org

如前所述,我们将在此项目中使用三个模块。要使用这些模块,我们必须安装必要的库。使用pip安装库非常简单。Pip是程序包管理工具。我们将使用命令行界面进行安装。这是一次安装所有3个库的行:

pip install numpy pandas opencv-python

安装完成后,我们必须将它们导入到我们的程序中。在大家喜欢的代码编辑器中打开一个新文件。以下是有关如何导入已安装库的代码:

import numpy as np
import pandas as pd
import cv2

OpenCv导入为cv2。对于其他库,我们将它们“ as”导入,以便在程序中更轻松地调用它们。

完善!现在,我们可以进行下一步,在此步骤中,我们将定义要用于测试颜色识别器应用程序的图像。

定义图片

您可以选择任何想要的图像。我将图像保存在与程序相同的文件夹中,这使查找和导入更加容易。

img = cv2.imread("color_image.jpg")

为了给您一些想法,这是我将用于此项目的图像:

大家准备好进行一些编程了吗?让我们继续下一步。

颜色识别

我问大家一个好问题。小伙伴们知道机器就相当于一张白纸吗?我们认为是因为他们学到了教给他们的东西。

教授色彩

首先,我们必须教给他们什么是颜色。为此,我们需要包含颜色名称和一些与这些颜色匹配的值的数据。由于大多数颜色都可以使用红色,绿色和蓝色定义。这就是为什么我们将RGB格式用作数据点的原因。我找到了一个准备就绪的csv文件,其中包含大约1000个颜色名称和RGB值。下面是相关链接:

https://github.com/codebrainz/color-names/blob/master/output/colors.csv

我们将在程序中使用此csv文件。该文件的屏幕截图可让您有所了解:

colors.csv

让我们使用read_csv方法将colors.csv文件导入到我们的程序中。由于我们下载的csv文件没有列名,因此我将在程序中定义它们。此过程称为数据处理。

index=["color", "color_name", "hex", "R", "G", "B"]csv = pd.read_csv('colors.csv', names=index, header=None)

全局变量

在以下步骤中,我们将定义两个函数。为了使应用程序顺利运行,我们需要一些全局变量。大家将了解全局变量在使用函数时是如何帮助大家的。

clicked = False
r = g = b = xpos = ypos = 0

颜色识别功能

当我们双击图像的某个区域时,将调用此函数。它将返回颜色名称和该颜色的RGB值。这就是神奇的地方!

def recognize_color(R,G,B): minimum = 10000 for i in range(len(csv)): d = abs(R- int(csv.loc[i,"R"])) + abs(G- int(csv.loc[i,"G"]))+ abs(B- int(csv.loc[i,"B"])) if(d<=minimum): minimum = d cname = csv.loc[i,"color_name"] return cname

鼠标点击功能

此函数用于定义我们的双击过程。在创建应用程序部分时,我们将需要它。

def mouse_click(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDBLCLK: global b,g,r,xpos,ypos, clicked clicked = True xpos = x ypos = y b,g,r = img[y,x] b = int(b) g = int(g) r = int(r)

希望大家继续和我在一起!看起来可能有些复杂,但是当我们开始在编辑器中编写它们时,大局就会显现出来。我们尽量使事情变得简单易懂。

应用

很高兴大家能完成此步骤。在这一步中,我们将使用OpenCV方法将图像作为新窗口打开。在该窗口中,我们将使用我们先前定义的功能。该应用程序非常简单,当我们双击图像上的某个区域时,它将返回颜色名称和颜色值。

应用窗口

首先,让我向大家展示如何使用OpenCV将图像文件作为新窗口打开。

cv2.namedWindow('Color Recognition App')

其次,让我们调用我们创建的鼠标单击功能。这为我们的应用程序提供了更多功能。

cv2.setMouseCallback('Color Recognition App',mouse_click)

应用程序

这是while循环,用于启动我们的应用程序窗口。

while(1):cv2.imshow("Color Recognition App",img) if (clicked): #cv2.rectangle(image, startpoint, endpoint, color, thickness)-1 fills entire rectangle cv2.rectangle(img,(20,20), (750,60), (b,g,r), -1)#Creating text string to display( Color name and RGB values ) text = recognize_color(r,g,b) + ' R='+ str(r) + ' G='+ str(g) + ' B='+ str(b) #cv2.putText(img,text,start,font(0-7),fontScale,color,thickness,lineType ) cv2.putText(img, text,(50,50),2,0.8,(255,255,255),2,cv2.LINE_AA)#For very light colours we will display text in black colour if(r+g+b>=600): cv2.putText(img, text,(50,50),2,0.8,(0,0,0),2,cv2.LINE_AA) clicked=False

关闭申请

如果您使用过OpenCV项目,则可能熟悉此步骤。我们必须定义如何结束和关闭应用程序窗口。否则,它将因为我们使用while(1)启动应用程序而永远运行。添加以下行是您未来项目的一个好习惯。

#Break the loop when user hits 'esc' key if cv2.waitKey(20) & 0xFF ==27: breakcv2.destroyAllWindows()

交流群

(0)

相关推荐

  • Opencv实践

    Opencv实践 前言 一.安装库 二.基本操作 三.问题解决 结束语 前言  最近项目需要对图像进行一些预处理,想起了opencv这个好工具,话不多说,直接上笔记! 一.安装库 1.网上查找代码会看 ...

  • python+opencv图像处理(二)

    python+opencv图像处理(二) ----图像变换 自然界中有很多的颜色,红红的花,绿绿的草,蓝蓝的天,白白的云,多姿多彩的世界,美轮美奂的图像. 通过手机,照相机就可以定格每一个美的瞬间. ...

  • 图像旋转90/180 opencv坐标系

    问题描述: 图像旋转90.180.270等 使用类似下面的代码,会有黑边,图像变形之类的问题 其实windows系统自带类似的功能,但是我需要批量处理图像,因此尝试自己写 算法基础: 这种直角的旋转, ...

  • Python+opencv 图像处理(五)

        灰度反转 "你说的黑是什么黑......"有一首歌的歌词是这样的. 在图像中,黑是什么? 很简单,就是0嘛. 因为在数字图像里,用0表示黑. 那么,"你说的白是什 ...

  • (7条消息) OpenCV绘制文字、图形

    文章目录 一.文字putText 二.线line 三.矩形rectangle 四.圆circle 五.椭圆ellipse() color问题:图形的颜色会受到图像通道数的影响.如图像是灰度图,那么图形 ...

  • python+opencv图像处理(四十三)

    Luplacian算子 1.Luplacian算子 可以用二阶导数可以用来检测边缘,拉普拉斯算子是线性二阶微分算子. 2.Luplacian算子实现 在 OpenCV 中, 可以用函数Laplacia ...

  • 基于Python查找图像中最常见的颜色

    重磅干货,第一时间送达 01. 准备工作 02. 常用方法 img_temp = img.copy()img_temp[:,:,0], img_temp[:,:,1], img_temp[:,:,2] ...

  • 基于Python获取股票分析,数据分析实战

    基于Python获取股票分析,数据分析实战

  • 基于 Python 的 11 种经典数据降维算法

    网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...

  • Keras: 基于Python的深度学习库

    Keras 是一个用 Python 编写的高级神经网络 API,它能够以TensorFlow, CNTK或者 Theano作为后端运行.Keras 的开发重点是支持快速的实验.能够以最小的时延把你的想 ...

  • 构建基于Python的持续交付-附书单推荐

    在互联网行业高速发展的今天,掌握CI/CD已经成了加薪必不可少的技能了.要真正做到CI/CD,对于我们测试的要求是相当的高了,芒果在昨天一天的时间里就听了数次的吐槽说这些知识点太难掌握了,要求太多了, ...

  • 基于Python的自动化测试平台开发你要理解的:uWSGI

    在我们使用Django开发自动化测试平台时,最必不可少的步骤是在服务器上部署它.在开发阶段中,对于Django项目我们使用的web服务器一般都是自带的runserver, 但是runserver从内存 ...

  • BciPy: 一款基于Python用于BCI研究的开源软件

    ‍‍‍‍‍‍‍‍‍‍ ‍‍‍‍‍‍‍‍‍‍ 进行脑机接口(BCI)研究对技术和软件有很高的要求.为了加速BCIs的开发和可访问性,研究人员开发了BciPy,一个基于Python的用于BCI研究的开源软 ...

  • Python字体颜色设置

    Python字体颜色设置 平时学习工作中,我们经常会接触到一些大佬写的Python工具,运行起来总会显示出五颜六色的字体,比如红色代表Error , 黄色代表Warning , 绿色代表Success ...

  • 每周一本书之《Keras快速上手:基于Python的深度学习实战》

    数据挖掘与深度学习毫无疑问是大数据时代最炙手可热的研究方向.在很多前沿领域,深度学习的出现和发展正在颠覆人类对于传统计算机技术的认知. 编辑 | abby 官网 | www.datayuan.cn 微 ...